关于jquery:Javascript日期字符串构造错误的日期

Javascript Date string constructing wrong date

本问题已经有最佳答案,请猛点这里访问。

嗨,我正试图用一个字符串构造一个javascript日期对象,但它总是在错误的日期创建。它总是构建一个落后一天的日子。这是我的密码

1
var date = new Date('2006-05-17');

我想要的日期是

1
Wednesday May 17 2006 00:00:00 GMT-0700 (PDT)

但是我得到了

1
Tue May 16 2006 17:00:00 GMT-0700 (PDT)


当您以字符串形式传递日期时,实现是特定于浏览器的。大多数浏览器将破折号解释为时间以UTC为单位。如果您有一个与UTC的负偏移量(您这样做了),它将出现在上一个本地日。

如果需要本地日期,请尝试使用斜线,如下所示:

1
var date = new Date('2006/05/17');

当然,如果您不必从字符串中进行分析,那么您可以传递单独的数值参数,只需注意,当以数字形式传递时,月份是以零为基础的。

1
var date = new Date(2006,4,17);

但是,如果您有字符串,并且希望这些字符串解析为日期的方式保持一致,那么可以使用moment.js。

1
2
var m = moment('2006-05-17','YYYY-MM-DD');
m.format(); // or any of the other output functions


实际发生的情况是,解析器将您的破折号解释为格式为"YYYY-MM-DDTHH:mm:ss.sssz"的ISO-8601字符串的开头,默认情况下该字符串的格式为UTC时间(因此后面的"z")。

您也可以使用"ToisString()"日期函数生成此类日期。http://www.w3schools.com/jsref/jsref-toisostring.asp

在Chrome中(在IE 10中不起作用),如果在日期中添加"00:00"或"00:00:00"(不起作用),那么不管破折号是多少,它都将不再是UTC。;)


从"05"中删除前置零