javascript添加值月

时间:2014-04-17 11:15:24

标签: javascript html date

我正在创建一个系统,我需要每个月在变量上添加一个值。例如,去年1月我有5张假期假期,每个月我需要加1次假期。细分将是这样的: 1月= 5叶 2月= 6片叶子(这个月我用掉了2片叶子,留下了4片叶子) 3月= 5叶 四月= 6叶 等等。

我可以采用什么方法或如何完成它?

非常感谢!!

2 个答案:

答案 0 :(得分:0)

如果只是计算,那么您可以通过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
    };
}());

答案 1 :(得分:0)

我在为某个日期添加月份时使用此功能,而且我不希望在一个月内溢出:

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)是上个月的最后一天。