javascript 日期 为什么日期新日期("2011-12-13")被认为是星期一而不是星期二?



Date对象实例化如下:

new Date("2011-12-13")

返回一个将自己视为星期一的日期对象:

Date {Mon Dec 12 2011 16:00:00 GMT-0800 (PST)}

但根据我的日历,2011年12月13日是星期二。奇怪的是,当我像这样实例化日期对象时:

new Date("12/13/2011")

这(正确(返回一个星期二:

Date {Tue Dec 13 2011 00:00:00 GMT-0800 (PST)}

如何在初始示例中使用该语法(年-月-日(,并根据日历获取正确的星期几?

您可能想查看 https://stackoverflow.com/a/163584/436641,了解使用字符串在 JavaScript 中创建 Date 对象的一些注意事项。 简而言之,为了可靠性,您应该这样做:

new Date(2011, 11, 13);

(请注意,第二个参数 the month(对于 12 月的 1 月 到 11 为 0(,而不是 1 到 12。

在您的特定情况下,当您使用 "2011-12-13" 实例化时,它会使用 GMT,然后调整到您的本地时区,在您的情况下,该时区比 GMT 晚 8 小时。 所以你在问的前一天下午4点。 所以那是星期一,不是星期二。 (请参阅结果中,它说时间是 16:00:00,日期是 12 日而不是 13 日?

当您使用 "12/13/2011" 进行实例化时,您会在当地时区的 13 日午夜。 所以你得到星期二,你要求的那一天。

差异(可能(可以通过以下事实来解释:Date会将字符串传递给其静态parse()方法,该方法(可能(将其中一个字符串视为 ISO 8601 时间戳,另一个视为 RFC 822 时间戳,并且这些时间戳格式的时区默认值/最佳猜测是不同的。 有关 Firefox 的情况,请参阅 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse。 其他浏览器可能相同,也可能不同。 这就是为什么最好不要使用字符串(如果您确实使用字符串,请使用长而明确的标准时间戳格式,而不是截断的格式(。

相关内容

最新更新