Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

new Date() works differently in Chrome and Firefox

I want to convert date string to Date by javascript, use this code:

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

'2013-02-27T17:00:00' is UTC time in JSON object from server.

But the result of above code is different between Firefox and Chrome:

Firefox returns:

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

Chrome returns:

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

It's different 1 day, the correct result I would expect is the result from Chrome.

Demo code: http://jsfiddle.net/xHtqa/2/

How can I fix this problem to get the same result from both?

like image 285
cuongle Avatar asked Feb 27 '13 10:02

cuongle


People also ask

What is the format of new Date ()?

const d = new Date("2015-3-25"); The behavior of "YYYY/MM/DD" is undefined.

What is new Date () in JavaScript?

The Date object is an inbuilt datatype of JavaScript language. It is used to work with dates and times. The Date object is created by using new keyword, i.e. new Date(). The Date object can be used date and time in terms of millisecond precision within 100 million days before or after 1/1/1970.


2 Answers

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.

like image 65
Petr Abdulin Avatar answered Oct 09 '22 06:10

Petr Abdulin


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.

like image 30
Bergi Avatar answered Oct 09 '22 04:10

Bergi