Javascript日期,这是我的错误还是我发现了一个错误?

时间:2010-11-05 20:11:27

标签: javascript date

我的应用程序中有一段简单的Javascript,其中包含“添加日”链接,该日期为1天。它总是很完美,除非日期是11/07/2010,然后链接突然不再起作用。它真的很奇怪,因为它只挂在2010年7月11日的特定日期。

如何重现错误:

  1. 导航至页面here
  2. 在任何日期字段中,点击“今天”,或者只将日期设置为今天。
  3. 点击“添加日”,直到11/07/2010
  4. 现在点击“添加日”不再有用了!

3 个答案:

答案 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,只需添加秒并以这种方式截断日期将永远不会进展日期