javascript增值月

javascript增值月,javascript,html,date,Javascript,Html,Date,我正在创建一个系统,我需要每月在一个变量上添加一个值。例如,去年一月我有5个假期,每个月我需要增加1个假期。细分如下: 1月=5次假期 2月=6片叶子这个月我用光了2片叶子,剩下4片叶子 三月=五次假期 四月=6片树叶 诸如此类 我将采用什么方法或如何实现它 非常感谢 如果只是计算,那么您可以通过执行d.setMonthd.getMonth+1来添加月份。这使得Date可以计算出每个月的长度 var initial_value = 5, initial_date = new Date(2

我正在创建一个系统,我需要每月在一个变量上添加一个值。例如,去年一月我有5个假期,每个月我需要增加1个假期。细分如下: 1月=5次假期 2月=6片叶子这个月我用光了2片叶子,剩下4片叶子 三月=五次假期 四月=6片树叶 诸如此类

我将采用什么方法或如何实现它


非常感谢

如果只是计算,那么您可以通过执行d.setMonthd.getMonth+1来添加月份。这使得Date可以计算出每个月的长度

var initial_value = 5,
    initial_date = new Date(2014, 0, 1), // January
    end_date = new Date(2014, 3, 1);     // April

var spent = 2;

var value = initial_value,
    date = new Date(initial_date);
while (date.setMonth(date.getMonth() + 1), date <= end_date)
    value += 1;

value -= spent;

value; // 6
我一直在玩的一些额外的东西

var dates = (function () {
    function isLeapYear(year) {
        if (year % 4)   // not divisible by 4
            return false;
        if (year % 100) // not divisible by 100
            return true;
        if (year % 400) // not divisible by 400
            return false;
        return true;
    }
    return {
        year: new Date().getUTCFullYear(),
        get leapYear() { return isLeapYear(this.year); },
        isLeapYear: isLeapYear,
        get total() { return 365 + isLeapYear(this.year); },
        0: 31,
        get 1() { return 28 + isLeapYear(this.year); },
        2: 31,
        3: 30,
        4: 31,
        5: 30,
        6: 31,
        7: 31,
        8: 30,
        9: 31,
        10: 30,
        11: 31
    };
}());

我在向日期添加月份时使用此选项,我不想使月份溢出:

function addMonthsNoOverflow(dateParam, intParam) {
    var sum = new Date(new Date(dateParam.getTime()).setMonth(dateParam.getMonth() + intParam);
    if (sum.getDate() < dateParam.getDate()) {  sum.setDate(0);  }
    return(sum);
}
注:

它通过消除溢出来处理29、30或31变为1、2或3的情况


每月的某一天不是零索引,因此。setDate0是上个月的最后一天。

听起来你想把它存储在某个地方?你试过什么吗?谢谢你的回答!然而,我想要实现的是每月在初始值上增加1。对不起,如果我不明白的话。假设初始的_值是5,10个月后,它应该是15。这使得Date可以计算出每个月的长度。并非在所有情况下:使用上述方法将一个月添加到5月31日。你将得到7月1日,我现在得到了。谢谢@RobG这是真的,这是正确的值,即使你试图在月数上加一,因为没有6月31日。这也是我在代码中使用每个月的第一天的原因。@user3545006如果您是从每个月的第29天开始,您可能希望添加另一个检查,以便在天数超过月份长度时进行更正
function addMonthsNoOverflow(dateParam, intParam) {
    var sum = new Date(new Date(dateParam.getTime()).setMonth(dateParam.getMonth() + intParam);
    if (sum.getDate() < dateParam.getDate()) {  sum.setDate(0);  }
    return(sum);
}