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

javascript日期为什么新日期(“2011-12-13”)被认为是星期一而不是星期二?,javascript,date,Javascript,Date,日期对象实例化如下: new Date("2011-12-13") new Date("12/13/2011") 返回一个日期对象,将其视为星期一: Date {Mon Dec 12 2011 16:00:00 GMT-0800 (PST)} 但根据我的日历,2011年12月13日是星期二。奇怪的是,当我像这样实例化date对象时: new Date("2011-12-13") new Date("12/13/2011") 此(正确)返回星期二: Date {Tue Dec 13 20

日期对象实例化如下:

new Date("2011-12-13")
new Date("12/13/2011")

返回一个日期对象,将其视为星期一:

Date {Mon Dec 12 2011 16:00:00 GMT-0800 (PST)}
但根据我的日历,2011年12月13日是星期二。奇怪的是,当我像这样实例化date对象时:

new Date("2011-12-13")
new Date("12/13/2011")
此(正确)返回星期二:

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

如何在我的初始示例(年-月-日)中使用语法,并根据我的日历获得正确的一周日期?

您可能需要查看一些关于使用字符串在JavaScript中创建日期对象的注意事项。简而言之,为了可靠性,您应该这样做:

new Date(2011, 11, 13);
(请注意,第二个参数“月份”从1月到12月的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的情况,请参阅。其他浏览器可能相同,也可能不同。这就是为什么最好不要使用字符串(如果使用字符串,请使用长而明确的标准时间戳格式,而不是截断的格式)。

我在回答的最后一段添加了可能的原因。基本上,
Date.parse()
必须猜测当它得到一个被截断的时间戳字符串时,它的意图是什么,因此它猜测它认为可能对时区意味着什么。值得注意的是,如果你在字符串中添加'00:00:00',你就会得到你想要的结果。在我的例子中,只处理字符串而不解析日期部分(并减去1表示月份)更容易。