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。 其他浏览器可能相同,也可能不同。 这就是为什么最好不要使用字符串(如果您确实使用字符串,请使用长而明确的标准时间戳格式,而不是截断的格式(。