现在这个代码适用于明天和下个月 - 周末使用工作,除非现在它接近月末它导致错误。我的startdate设置为8/31/12并且enddate是8/34/12(在Sql中转换为DateTime时会出现错误。)
我成功地做数学添加一天,并添加一个月,但是当谈到在下个月添加天数时它会中断。我想我理解为什么这是hapening,它是日期 - “29”把它变成int然后添加 - 我想我将在12月的“下个月”得到同样的问题。
我的问题是,将日期添加到javascript日期的正确方法(或任何工作方式)是什么,它可以了解每月的日期。
var d = new Date();
var startdate;
var enddate;
if ($('._tomorrow').attr("checked") == "checked") {
startdate = [d.getMonth() + 1, d.getDate() + 1, d.getFullYear()].join('/');
enddate = [d.getMonth() + 1, d.getDate() + 2, d.getFullYear()].join('/');
}
if ($('._weekend').attr("checked") == "checked") {
startdate = [d.getMonth() + 1, d.getDate() + 6 - d.getDay(), d.getFullYear()].join('/');
enddate = [d.getMonth() + 1, ( d.getDate() + 6 - d.getDay()) + 2, d.getFullYear()].join('/');
}
if ($('._nextmonth').attr("checked") == "checked") {
startdate = [d.getMonth() + 2, 1, d.getFullYear()].join('/');
enddate = [d.getMonth() + 2, 29 , d.getFullYear()].join('/');
}
答案 0 :(得分:2)
您需要构建一个新的日期对象,其中包含调整后的值。现在你只是采取一些随机数字并增加它们,例如。
31+3/8/2012 -> 34/8/2012, not 3/9/2012
首先做这样的事情:
d.setMonth(d.getMonth()+ 2)
内部JS会适当调整日/月/年以说明每个期间结束时造成的“溢出”,并且仍会产生有效日期。
答案 1 :(得分:0)
要添加指定的天数,请创建一个新的Date
对象,然后使用d.setDate(d.getDate() + n)
,其中n
是要添加的所需天数。
如果您再次致电getYear()
,getMonth()
和getDate()
,您会发现他们已被“更正”为有效值:
> d = new Date()
Wed Aug 29 2012 20:57:12 GMT+0100 (BST)
> [d.getDate(), d.getMonth() + 1]
[29, 8]
> d.setDate(d.getDate() + 10);
1347134232993
> [d.getDate(), d.getMonth() + 1]
[8, 9]
添加月份并不是那么简单,因为您需要定义当下个月比当前月份短时会发生什么 - 例如什么日期是“1月31日之后的一个月”?
虽然计算下个月的 start 很容易!
var now = new Date();
var start = new Date(now.getFullYear(), now.getMonth(), now.getDate());
var end = new Date(now.getFullYear(), now.getMonth(), now.getDate());
if ($('._tomorrow').is(':checked')) {
start.setDate(now.getDate() + 1);
end.setDate(now.getDate() + 2);
} else if ($('._weekend').is(':checked')) {
start.setDate(now.getDate() + 6 - now.getDay());
end.setDate(now.getDate() + 8 - now.getDay());
} else if ($('._nextmonth').is(':checked')) {
start.setDate(1);
end.setDate(1);
start.setMonth(now.getMonth() + 1);
end.setMonth(now.getMonth() + 2);
}
var startStr = [start.getMonth() + 1, start.getDate(), start.getFullYear()].join('/');
var endStr = [end.getMonth() + 1, end.getDate(), end.getFullYear()].join('/');