Потому что он устанавливает дату в соответствии с UTC и возвращает ее с вашим местным смещением часового пояса. Я бы рекомендовал явно указать смещение часового пояса, если это то, что вам нужно, или добавление смещения часового пояса после факта.
var d = new Date('2015-03-31T00:00:00-0400');
// or
var d = new Date('2015-03-31');
d.setMinutes(d.getMinutes() + d.getTimezoneOffset());
Если вы хотите это, чтобы быть в UTC, вы можете вызвать метод toUTCString()
на нем вместо этого, который даст вам дату вы ожидаете, хотя и не в вашем часовом поясе.
Требуется дата, когда вы передаете его как UTC, а затем примените ваш местный модификатор UTC, который равен -4, поэтому 2015-03-31 00 - 4h = 2015-03-30 20 –
** GMT-0400 ** .... – Oriol