关于 javascript:date.parse() 根据格式提供不同的值 (?)

date.parse( ) provides different values depending on format (?)

考虑下面的简单 javascript 代码示例。
我希望 d 和 x 具有相同的值,例如d-x = 0,但好像不是这样?我不允许使用用于 var x 的日期字符串格式,还是有其他原因? (我无法在 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse 中直接找到这样的限制,但也不是字符串格式 yyyy-mm- 的示例dd)

1
2
3
4
5
6
7
8
9
var d = Date.parse("March 21, 2012");

alert(d); //val 1332284400000

var x = Date.parse("2012-03-21");

alert(x);  //val 1332288000000

alert(d-x); //val -3600000


如果最近的浏览器可以将日期字符串解释为 ISO-8601 - 它会(!!!)。使用这种格式,您的日期/时间字符串将被解释为 UTC(!!!)

您应该尽可能坚持使用 "YYYY/MM/DD" 作为日期字符串。它得到普遍支持且明确无误。使用这种格式,所有时间都是本地时间。

例如:看看这个烂摊子:

1
2
3
4
5
6
new Date("2013-07-27T10:10:10")

chrome : Sat Jul 27 2013 13:10:10 GMT+0300 (Jerusalem Daylight Time)
ff:      Sat Jul 27 2013 10:10:10 GMT+0300 (Jerusalem Standard Time)
ie8  : nan
ie :     Sat Jul 27 10:10:10 UTC+0300 2013

而:

1
2
3
4
5
new Date("2013/07/27 10:10:10")

ie:     Sat Jul 27 10:10:10 UTC+0300 2013
chrome: Sat Jul 27 2013 10:10:10 GMT+0300 (Jerusalem Daylight Time)
ff:     Sat Jul 27 2013 10:10:10 GMT+0300 (Jerusalem Standard Time)

我尝试通过提醒日期字符串来打印日期,结果发现

1
2
3
4
5
6
7
var d = Date.parse("March 21, 2012");
var formatted_d = new Date(d);
alert(formatted_d);

var x = Date.parse("2012-03-21");
var formatted_x = new Date(x);
alert(formatted_x);

2012 年 3 月 21 日星期三 00:00:00 GMT 1100 (EST) 和

2012 年 3 月 21 日星期三 11:00:00 GMT 1100 (EST)

所以在解析"March 21, 2012"时,时区假定为0。但在解析"2012-03-21"时,时区假定为您的浏览器时区。