javascript增值月
我正在创建一个系统,我需要每月在一个变量上添加一个值。例如,去年一月我有5个假期,每个月我需要增加1个假期。细分如下: 1月=5次假期 2月=6片叶子这个月我用光了2片叶子,剩下4片叶子 三月=五次假期 四月=6片树叶 诸如此类 我将采用什么方法或如何实现它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
非常感谢 如果只是计算,那么您可以通过执行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);
}