我正在创建一个系统,我需要每个月在变量上添加一个值。例如,去年1月我有5张假期假期,每个月我需要加1次假期。细分将是这样的: 1月= 5叶 2月= 6片叶子(这个月我用掉了2片叶子,留下了4片叶子) 3月= 5叶 四月= 6叶 等等。
我可以采用什么方法或如何完成它?
非常感谢!!
答案 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)是上个月的最后一天。