我的应用程序中有一段简单的Javascript,其中包含“添加日”链接,该日期为1天。它总是很完美,除非日期是11/07/2010,然后链接突然不再起作用。它真的很奇怪,因为它只挂在2010年7月11日的特定日期。
如何重现错误:
答案 0 :(得分:13)
问题是你要将24小时添加到日期添加一天;夏令时挫败了你,因为11月7日00:00后24小时将是11月7日23:00(第二次)。
答案 1 :(得分:3)
其他人发现了问题所在。
要修复它,您可以使用占用年,月和日的重载Date
构造函数:
var aDate = new Date(2010, 10, 07);
var aDatePlusOneDay = new Date(aDate.getFullYear(),
aDate.getMonth(),
aDate.getDate() + 1, // HERE
aDate.getHours(),
aDate.getMinutes(),
aDate.getSeconds(),
aDate.getMilliseconds());
这是一个更通用的解决方案,可以将任何日期增加给定的毫秒数量,同时考虑到夏令时的变化:
Date.addTicks = function(date, ticks) {
var newDate = new Date(date.getTime() + ticks);
var tzOffsetDelta = newDate.getTimezoneOffset() - date.getTimezoneOffset();
return new Date(newDate.getTime() + tzOffsetDelta * 60000);
}
在Date
对象中添加一天就可以在一天内添加毫秒数:
Date.addTicks(new Date(2010, 10, 7), 86400000); // new Date(2010, 10, 8)
参考文献:
答案 2 :(得分:1)
夏令时。 (在美国的大多数地方)时间在11月的第一个星期日回滚。您的代码只是在输入框指定的一天开始时添加一些毫秒,并返回结果日期的开头:但是由于DST,只需添加秒并以这种方式截断日期将永远不会进展日期