Shashwat Tripathi
Shashwat Tripathi

Reputation: 582

Chrome 58.0.3029.110 version not converting date in correct local timezone

Chrome not giving a correct result on date conversion:

Date : "2017-05-22T14:00:00"

On doing this in chrome console:

new Date("2017-05-22T14:00:00");

Output is:

Mon May 22 2017 14:00:00 GMT+0530 (IST)

This is wrong because I am in IST. It should have rather given output as

Mon May 22 2017 19:30:00 GMT+0530 (IST) 

Safari is giving correct results. Chrome was right before but I think latest update is having an issue.

Found that appending Z in date string results correct date value.

new Date("2017-05-22T14:00:00Z");

Upvotes: 0

Views: 461

Answers (1)

Matt Johnson-Pint
Matt Johnson-Pint

Reputation: 241920

The input value is being interpreted correctly. ECMAScript 2015 (ES6) section 20.3.1.16 states:

If the time zone offset is absent, the date-time is interpreted as a local time.

This aligns with the ISO-8601 standard as well.

In previous versions of ECMAScript, UTC was assumed when no offset was provided. That goes against ISO-8601, and was implemented inconsistently across various environments.

If you want the input to be interpreted as UTC, then you should provide an offset, either +00:00, or Z as part of the input string.

However, if you are talking about how a Date object should be displayed when logged to the debug console, that is not defined in the spec. In some environments, you will see the output of date.toString(), which shows the local date and time in a non-standard format, and in other environments (such as FireFox) you will see the output of date.toISOString(), which shows the UTC date and time in ISO-8601 format.

There's no spec about which to show, so either would be valid. If you want to see specific output, don't just log a Date object, call a function on the object that returns a string and log that instead.

Upvotes: 2

Related Questions