New Date()在 Chrome 和 Firefox 中的工作方式不同

我想通过 javascript 把日期字符串转换成 Date,使用以下代码:

var date = new Date('2013-02-27T17:00:00');
alert(date);

'2013-02-27T17:00:00'是来自服务器的 JSON 对象的 UTC 时间。

但是以上代码的结果在 Firefox 和 Chrome 之间是不同的:

Firefox 返回:

Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time)

返回:

Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time)

这是不同的1天,正确的结果,我会期望是从 Chrome 的结果。

演示代码: http://jsfiddle.net/xHtqa/2/

我如何解决这个问题,以获得相同的结果从两个?

73557 次浏览

The correct format for UTC would be 2013-02-27T17:00:00Z (Z is for Zulu Time). Append Z if not present to get correct UTC datetime string.

Yeah, unfortunately the date-parsing algorithms are implementation-dependent. From the specification of Date.parse (which is used by new Date):

The String may be interpreted as a local time, a UTC time, or a time in some other time zone, depending on the contents of the String. The function first attempts to parse the format of the String according to the rules called out in Date Time String Format (15.9.1.15). If the String does not conform to that format the function may fall back to any implementation-specific heuristics or implementation-specific date formats.

To make the Date constructor not (maybe) use the local timezone, use a datetime string with timezone information, e.g. "2013-02-27T17:00:00Z". However, it is hard to find a format that is reliable parsed by every browser - the ISO format is not recognised by IE<8 (see JavaScript: Which browsers support parsing of ISO-8601 Date String with Date.parse). Better, use a unix timestamp, i.e. milliseconds since unix epoch, or use a regular expression to break the string down in its parts and then feed those into Date.UTC.

I found one thing here. It seems the native Firefox Inspector Console might have a bug: If I run "new Date()" in the native Inspector, it shows a date with wrong timezone, GMT locale, but running the same command in the Firebug Extension Console, the date shown uses my correct timezone (GMT-3:00).

Try using moment.js. It goes very well and in similar fashion with all the browsers. comes with many formatting options. use moment('date').format("") instead of New Date('date')

Noticed that FireFox wasn't returning the same result as Chrome. Looks like the format you use in kendo.toString for date makes a difference.

The last console result is what I needed:

enter image description here