Javascript 计算日期为下个月底

Javascript 计算日期为下个月底,javascript,datetime,frappe,Javascript,Datetime,Frappe,我在frappe中有一个函数,用于计算发票到期日。我有4种类型的客户信用条款,从过账日期算起0天、7天、14天,从发票月份的最后一天算起30天,即如果在5月份的任何日期开具发票,则付款到期日为15年6月30日 所以我有下面的函数get_due_date。0、7、14天客户的所有付款到期日都可以正常工作,但30天仍然不行。它只是在发布日期的基础上增加30天 我是Javascript新手,所以我借用了frappe.ui.form.on部分中的代码,我怀疑最后一行错误地覆盖了我的get_due_dat

我在frappe中有一个函数,用于计算发票到期日。我有4种类型的客户信用条款,从过账日期算起0天、7天、14天,从发票月份的最后一天算起30天,即如果在5月份的任何日期开具发票,则付款到期日为15年6月30日

所以我有下面的函数get_due_date。0、7、14天客户的所有付款到期日都可以正常工作,但30天仍然不行。它只是在发布日期的基础上增加30天

我是Javascript新手,所以我借用了frappe.ui.form.on部分中的代码,我怀疑最后一行错误地覆盖了我的get_due_date函数,但我不知道正确使用的语法

有人能帮忙吗

function get_due_date(base, days){
    base = frappe.datetime.str_to_obj(base);
    days = parseInt(days, 10);
    var fmt = frappe.datetime.obj_to_str;    
    switch (parseInt(days)){
        case (0):
            return fmt(base);
       case (7):
       case (15):
            return fmt(frappe.datetime.add_days(base, days));
       case (30):
            base = new Date(base.getFullYear(), base.getMonth()+2, 0); 
            return fmt(base)
    }
}

frappe.ui.form.on("Sales Invoice", "posting_date", function(frm) {
    var days = get_db_value('Customer', frm.doc.customer, 'credit_days');
    days = days*1;
    console.log([days, frm]);
    msgprint(get_due_date(frm.doc.posting_date, days));
    if (days && frm.doc.posting_date){
        frappe.model.set_value('Sales Invoice', frm.doc.name, 'payment_due_date', get_due_date(frm.doc.posting_date, days));
    }
});

控制台中有错误吗?我问这个问题的原因是,它在这里似乎工作得很好,我不得不模仿frappe函数,只是一个通用的未捕获类型错误:无法读取frappe中所有事务加载中出现的未定义属性“0”。似乎不会影响任何内容,并且无论我的脚本是否运行都会显示。如果我在发票表单中更改过账日期,我会在控制台中收到一个错误,提示:未捕获引用错误:未定义get\u db\u值,表单将卸载到我身上。。。那么var days=line的语法有问题吗?好的,我已经修复了:var days=cur_frm.cscript.get_db_值'Customer',frm.doc.Customer',credit_days';现在,如果我更改发布日期,我会得到一个msgprint显示:2015-06-30。因此,我的值是正确的,但它似乎没有进入字段“付款到期日”!您现在似乎调试得很好。因为现在的问题是如何使用frappe.model.set_值来更新我的字段?这不适合这个话题。编辑问题以反映您所问的标题、正文和标签,或者在解决/回答问题时关闭此问题,并就新主题提出新问题。