mustafa.0x
mustafa.0x

Reputation: 1506

Date returning inconsistent results (depending whether leading zero exists)

> new Date('2015-1-1')
Thu Jan 01 2015 00:00:00 GMT-0500 (EST)
> new Date('2015-01-1')
Thu Jan 01 2015 00:00:00 GMT-0500 (EST)
> new Date('2015-1-01')
Thu Jan 01 2015 00:00:00 GMT-0500 (EST)

// Yet...
> new Date('2015-01-01')
Wed Dec 31 2014 19:00:00 GMT-0500 (EST)

// Similarly: 
> new Date('2015-1-10')
Sat Jan 10 2015 00:00:00 GMT-0500 (EST)
> new Date('2015-01-10')
Fri Jan 09 2015 19:00:00 GMT-0500 (EST)

Can't figure out why this is happening (Chrome 39). Is it related to octal parsing?

Firefox only accepts new Date('2015-01-10'), and returns what I expect: Date 2015-01-10T00:00:00.000Z

Upvotes: 1

Views: 105

Answers (2)

Aditya
Aditya

Reputation: 196

I am unsure of your problem since My chrome(39.0.2171.99) gives me Jan 01 in all case. But having said this, I would like to point out that you should probably use

new Date(2015,1,1)

This is how JS Date is supposed to be initialised.

Upvotes: 0

mustafa.0x
mustafa.0x

Reputation: 1506

Found the answer in a related question; it appears Chrome parses the YYYY-MM-DD format as UTC time, then converts it the local timezone. So, 2015-01-01 00:00:00 in UTC is Dec 31 in EST.

See Inconsistencies when creating new date objects:

It looks like the form '1979-04-05' is interpreted as a UTC date (and then that UTC date is converted to local time when displayed).

Apparently, a possible cross browser solution is to replace the dashes with slashes to force using local time:

new Date('2015-01-10'.replace(/-/g, '/'))

Upvotes: 1

Related Questions