Reputation: 389
When I try to parse a string date from March, new Date()
works incorrectly. But when my string date is from April, everything is fine. I don't understand this. Why does it work like that?
var a = '2018-03-07T00:00+03:00';
console.log(a);
console.log(new Date(a).toString());
var b = '2018-04-07T00:00+03:00';
console.log(b);
console.log(new Date(b).toString());
Here's a screenshot from Google Chrome browser:
Upvotes: 2
Views: 229
Reputation: 25351
As others pointed out, it's due to the daylight saving time in your time-zone. Notice the times in your screenshot: the time for a
is 23
and for b
is midnight 00
, which clearly tells you what happened.
If you want to parse the values without the daylight saving time, you can use the GMT+0 time-zone by replacing your time-zone +3:00
with z
. However, then you need to correct time manually by adding/subtracting the hours of your time-zone (-3 in your case). Here is an example:
var a = '2018-03-07T00:00+03:00';
a.replace('+03:00', 'z');
a = new Date(a);
a.setHours(a.getHours() - 3); //3 is your time-zone
console.log(a.toUTCString());
var b = '2018-04-07T00:00+03:00';
b.replace('+03:00', 'z');
b = new Date(b);
b.setHours(b.getHours() - 3); //3 is your time-zone
console.log(b.toUTCString());
Obviously, this code will only work for one known time-zone. If your values can be in different time-zone, then instead of replacing, you need to extract the time-zone from the string (the last 6 characters in this format, except for GMT-0 which is z
), and then use it to correct the time on the setHours()
line.
Upvotes: 1
Reputation: 822
Because of summer daylight saving time. According to Date documentation, the date is specific moment in time relative to Jan 1st 1970. That moment in time in March belonged to the part of year with daylight saving offset in your specific locale
Upvotes: 1
Reputation: 33
Your first date is Standard Time... and the second one is Daylight Time.
var x = new Date('2018-03-07T00:00+03:00');
console.log(x);
var y = new Date('2018-04-07T00:00+03:00');
console.log(y);
In your scenario... EET – Eastern European Time versus EEST – Eastern European Summer Time like shown on console.
Upvotes: 0