javascript add value month

javascript add value month

本文关键字:month value add javascript      更新时间:2023-09-26

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

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

非常感谢!!

如果只是计算,那么可以通过执行d.setMonth(d.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

此方法适用于每月的< 29天,对于29 <= x <= 31天,您将需要进行额外检查
即检查到那时它改变了多少个月,如果不是1,在这些情况下你想要什么行为?


如果你总是想要一个月的最后一天,那么它只比上面长几步,

d.setDate(1);                 // go to a "safe day" to change months
d.setMonth(d.getMonth() + 2); // go 2 months forward
d.setDate(0);                 // roll back to the last day of the previous month

一些额外的东西我一直在玩

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的情况

月份的日期不是零索引的,所以setDate(0)是上个月的最后一天。