Javascript 添加到可能无法检测到1月份的年份

Javascript 添加到可能无法检测到1月份的年份,javascript,arrays,date,Javascript,Arrays,Date,简言之,我有一个页面,可以设置客户将如何向我付款 var schedule = []; function test() { billingDate = document.getElementById("billingDate").value; startMonth = parseFloat(billingDate.split("-")[1]); startYear = parseFloat(billingDate.split("-")[0]); frequency = document.ge

简言之,我有一个页面,可以设置客户将如何向我付款

var schedule = [];

function test() {
billingDate = document.getElementById("billingDate").value;
startMonth = parseFloat(billingDate.split("-")[1]);
startYear = parseFloat(billingDate.split("-")[0]);
frequency = document.getElementById("frequency").value;
instalments = document.getElementById("instalments").value;
months = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"];

for (var i = 0; i < instalments; i++) {

    if (frequency === "monthly") {
        mm = months[parseFloat((i + startMonth - 1) % 12)];
        // If the month is ever January, increase the year by 1
        if (mm === months[0] && startMonth != 1) // if the first month isn't January
        {
            yyyy = startYear + 1;
        } else {
            yyyy = startYear;
        }
        schedule.push(mm + "-" + yyyy);

    } else {

        // frequency === "bimonthly"
        mm = months[parseFloat(((i * 2) + startMonth - 1) % 12)];
        if ((mm === months[0] && startMonth != 1) || (mm === months[1] && startMonth != 2)) {
            yyyy = startYear + 1;
            console.log("Start Month ! January/February, year + 1");
        } else {
            yyyy = startYear;
        }
        schedule.push(mm + "-" + yyyy);
    }

}
console.log(schedule);
document.getElementById("depositDates").innerHTML = schedule;
}
我可以选择他们可以分期付款多少,以及他们是否每月或双月(每两个月)向我付款

我现在有了它,所以月份会发生完美的变化,但是要让一年的时间改变为双月频率是很困难的

显然,1月份应该总是加上今年的+1。。。但是使用双月选项意味着一月可能无法检测,所以我将不得不使用二月。。。这很好,除非我在12月开始付账,这会给我带来很多麻烦

2014年12月启动法案时,2月将是2015年,但4月将回到2014年。。我搞不懂这部分

我这里有一把小提琴:

var schedule = [];

function test() {
billingDate = document.getElementById("billingDate").value;
startMonth = parseFloat(billingDate.split("-")[1]);
startYear = parseFloat(billingDate.split("-")[0]);
frequency = document.getElementById("frequency").value;
instalments = document.getElementById("instalments").value;
months = ["janvier", "f&eacute;vrier", "mars", "avril", "mai", "juin", "juillet", "ao&ucirc;t", "septembre", "octobre", "novembre", "d&eacute;cembre"];

for (var i = 0; i < instalments; i++) {

    if (frequency === "monthly") {
        mm = months[parseFloat((i + startMonth - 1) % 12)];
        // If the month is ever January, increase the year by 1
        if (mm === months[0] && startMonth != 1) // if the first month isn't January
        {
            yyyy = startYear + 1;
        } else {
            yyyy = startYear;
        }
        schedule.push(mm + "-" + yyyy);

    } else {

        // frequency === "bimonthly"
        mm = months[parseFloat(((i * 2) + startMonth - 1) % 12)];
        if ((mm === months[0] && startMonth != 1) || (mm === months[1] && startMonth != 2)) {
            yyyy = startYear + 1;
            console.log("Start Month ! January/February, year + 1");
        } else {
            yyyy = startYear;
        }
        schedule.push(mm + "-" + yyyy);
    }

}
console.log(schedule);
document.getElementById("depositDates").innerHTML = schedule;
}
var计划=[];
功能测试(){
billingDate=document.getElementById(“billingDate”).value;
startMonth=parseFloat(billingDate.split(“-”[1]);
startYear=parseFloat(billingDate.split(“-”[0]);
频率=document.getElementById(“频率”).value;
分期付款=document.getElementById(“分期付款”).value;
月份=[“janvier”、“fé;vrier”、“mars”、“avril”、“mai”、“juin”、“juillet”、“aoû;t”、“septembre”、“octobre”、“Novenbre”、“dé;cembre”];
对于(var i=0;i<分期付款;i++){
如果(频率=“每月”){
mm=月[parseFloat((i+开始月-1)%12)];
//如果月份为一月,则将年份增加1
if(mm==月[0]&&startMonth!=1)//如果第一个月不是一月
{
yyyy=startYear+1;
}否则{
yyyy=开始时间;
}
计划推送(mm+“-”+yyyy);
}否则{
//频率==“双月”
mm=月[parseFloat((i*2)+开始月-1)%12];
如果((mm==月[0]&&startMonth!=1)| |(mm==月[1]&&startMonth!=2)){
yyyy=startYear+1;
console.log(“开始月份!1月/2月,年份+1”);
}否则{
yyyy=开始时间;
}
计划推送(mm+“-”+yyyy);
}
}
控制台日志(时间表);
document.getElementById(“存款日期”).innerHTML=时间表;
}
编辑:

我做了一些清理,我决定(现在)使用++var方法,并限制自己提供过多的分期付款(几乎隐藏了这样一个事实:选择双月付款时年份不会改变,开始月份是1月/2月)。因此,如果月份是2月,我只能提供6期分期付款,还不错

var schedule = [];

function paySchedule() {
total = document.getElementById("total").value;
billingDate = document.getElementById("billingDate").value;
startMonth = parseFloat(billingDate.split("-")[1]);
startYear = parseFloat(billingDate.split("-")[0]);
frequency = document.getElementById("frequency").value;
instalments = document.getElementById("instalments").value;
months = ["janvier", "f&eacute;vrier", "mars", "avril", "mai", "juin", "juillet", "ao&ucirc;t", "septembre", "octobre", "novembre", "d&eacute;cembre"];
payments = (total / instalments).toFixed(2);
yyyy = startYear;
for (var i = 0; i < instalments; i++) {
    if (frequency === "monthly") {
        mm = months[parseFloat((i + startMonth - 1) % 12)];
        // get months by number
        monthNum = months.indexOf(mm);
        // check if month is January
        if (monthNum === 0) {
            console.log("Jan detected, year + 1");
            // add another year
            yyyy = startYear + 1;
        }
        schedule.push(payments + "-" + mm + "-" + yyyy);
    } else // important, make sure the user can only input a maximum of 6 instalments
    {
        // frequency === "bimonthly"
        mm = months[parseFloat(((i * 2) + startMonth - 1) % 12)];
        // get months by number
        monthNum = months.indexOf(mm);
        // check if month is January or February
        if ((monthNum === 0 || monthNum === 1) && startMonth != 1 && startMonth != 2) {
            // add another year
            yyyy = ++startYear;
        }
        schedule.push(payments + "-" + mm + "-" + yyyy);
    }
}
console.log(schedule);
document.getElementById("depositDates").value = schedule;
}
var计划=[];
函数paySchedule(){
总计=document.getElementById(“总计”).value;
billingDate=document.getElementById(“billingDate”).value;
startMonth=parseFloat(billingDate.split(“-”[1]);
startYear=parseFloat(billingDate.split(“-”[0]);
频率=document.getElementById(“频率”).value;
分期付款=document.getElementById(“分期付款”).value;
月份=[“janvier”、“fé;vrier”、“mars”、“avril”、“mai”、“juin”、“juillet”、“aoû;t”、“septembre”、“octobre”、“Novenbre”、“dé;cembre”];
付款=(总额/分期付款)。固定(2);
yyyy=开始时间;
对于(var i=0;i<分期付款;i++){
如果(频率=“每月”){
mm=月[parseFloat((i+开始月-1)%12)];
//数月
月数=月数。指数(mm);
//检查月份是否为一月
如果(月=0){
console.log(“检测到1月,年份+1”);
//再加一年
yyyy=startYear+1;
}
计划推送(付款+“-”+mm+“-”+yyyy);
}否则//重要信息,请确保用户最多只能输入6次分期付款
{
//频率==“双月”
mm=月[parseFloat((i*2)+开始月-1)%12];
//数月
月数=月数。指数(mm);
//检查月份是一月还是二月
如果((月数===0 | |月数===1)&&startMonth!=1&&startMonth!=2){
//再加一年
yyyy=++startYear;
}
计划推送(付款+“-”+mm+“-”+yyyy);
}
}
控制台日志(时间表);
document.getElementById(“存款日期”)。值=附表;
}

问题在于,您只更改要更改年份的月份的值,而不是所有未来月份的值

您可以通过替换这两行来解决问题

yyyy = startYear + 1;


,但这只是一个肮脏的修补程序,掩盖了正在发生的事情。您可以先将起始月份和年份添加到计划中,减少分期付款,然后在1月(或2月,即双月)时始终增加yyyy,完全摆脱
startMonth
startYear

到目前为止,IF语句中的所有内容都运行良好(从我看到的情况来看),else语句对我来说很糟糕。startYear++将不断为每一次迭代添加到年度中,例如:2014年12月、2015年1月、2016年2月,这样做会容易得多!