Kurkula
Kurkula

Reputation: 6762

Javascript new Date decreases date by a day

I have a scenario where I am using AngularJS to read date. Interestingly it decreases my date value by one.

Why is this happening?

new Date("2016-01-06T00:00:00")
give me result as 
Tue Jan 05 2016 16:00:00 GMT-0800 (Pacific Standard Time)

Upvotes: 2

Views: 185

Answers (3)

Shashank Agrawal
Shashank Agrawal

Reputation: 25797

This is because when you use the new Date() in the JavaScript, it converts and prints the date in browsers timezone.

So if you print:

new Date("2016-01-06T00:00:00-0800")

You will get the actual output you want, because of the -0800 difference between your time zone (determined by the browser) and the UTC time.

Upvotes: 3

Paul Richter
Paul Richter

Reputation: 11072

It is because the date is taking your browser's timezone in to account, which in your case is in PST. It does the same to me, in EST:

test = new Date("2016-01-06T00:00:00")

Tue Jan 05 2016 19:00:00 GMT-0500 (EST)

You can still obtain the time in UTC by using any of the .getUTC* functions, like so:

test.getUTCDate();

6

Upvotes: 2

Joseph
Joseph

Reputation: 119827

The UTC time zone is used to interpret arguments in ISO 8601 format that do not contain time zone information (note that ECMAScript 2015 specifies that date time strings without a time zone are to be treated as local, not UTC).

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

Since your date string appears to lack one, JS assumed it's UTC time. The result you see is the same moment in time, offset to your timezone. All you need to do is provide timezone data to the string you're parsing.

Upvotes: 2

Related Questions