mimo mimo - 2 months ago 9
AngularJS Question

Wrong date with angular material's date picker

I use the datepicker to pick a date and send it to the server.

When I log the JS value I get the correct result:

Tue Mar 22 2016 00:00:00 GMT+0100 (Mitteleuropäische Zeit)


but in the ajax request it is

2016-03-21T23:00:00.000Z


I don't modify the values, just giving the object to angulars http function.

Does Angular need some configuration to handle it?

Answer

Those two strings represent the same time. One is in UTC, i.e. GMT +0, which you can see from the Z ending. The other is in a different timezone, specifically GMT +1 hour.

If you had javascript date objects for both strings, and turned them into integers, i.e. seconds passed since Jan 1, 1970, UTC, you'd find them identical. They represent the same instant but in two different geographic locations.

var d1 = new Date('Tue Mar 22 2016 00:00:00 GMT+0100');
var d2 = new Date('2016-03-21T23:00:00.000Z');

Number(d1);  // 1458601200000
Number(d2);  // 1458601200000

Generally this is a good thing. Dealing in timezones gets very confusing. I find it best for a server to always deal in UTC.