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

Jam*_*mes 2 javascript date

日期对象实例化如下:

new Date("2011-12-13")
Run Code Online (Sandbox Code Playgroud)

返回一个认为自己是星期一的日期对象:

Date {Mon Dec 12 2011 16:00:00 GMT-0800 (PST)}
Run Code Online (Sandbox Code Playgroud)

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

new Date("12/13/2011")
Run Code Online (Sandbox Code Playgroud)

这(正确)返回星期二:

Date {Tue Dec 13 2011 00:00:00 GMT-0800 (PST)}
Run Code Online (Sandbox Code Playgroud)

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

Tro*_*ott 7

您可以查看/sf/answers/11450911/,了解使用字符串在JavaScript中创建Date对象的一些注意事项.简而言之,为了可靠性,您应该这样做:

new Date(2011, 11, 13);
Run Code Online (Sandbox Code Playgroud)

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