2016-02-26 3 views
0

, когда я строю дату формы этого ISO Строка «2016-02-01T16: 00: 00Z» Я получил Пн Фев 01 2016 17:00:00 GMT + 0100JavaScript дата часовой пояс странное поведение

Это швы, которые Js добавляет час по некоторым причинам.

Я думаю, что это вещь часового пояса ... но как я могу это исправить?

вобще

var date = new Date('2016-02-01T16:00:00Z'); 
 
alert(date);

+0

У вас есть ответы ниже? – jszobody

ответ

2

В соответствии со спецификациями строка даты ISO обрабатывается как UTC + 0000, которая обозначается символом Z в конце.

Z является зона целеуказатель для нулевого смещения UTC

Когда вы указываете временную дату строку для Date() конструктора, он разбирается в UTC.
Метод Date.prototype.toString() форматирует дату в соответствии с вашим часовым поясом, который может отличаться от UTC. Из-за этого вы получаете это смещение.

Можно указать пользовательский часовой пояс в конце строку ISO с ±hh:mm:

var d = new Date('2016-02-01T16:00:00+01:00'); 
d.toString() // will print "Feb 01 2016 16:00:00 GMT+0100", if you're in GMT+01:00 
+1

+1, однако разбор строк с конструктором Date является ненадежным и не рекомендуется, гораздо лучше вручную разобрать строки (библиотека может помочь, но не необходимо в большинстве случаев). – RobG

1

Javascript принимает вашу строку DATETIME, разбирает его в часовом поясе, указанном (UTC), но затем отображает его в текущем часовом поясе.

Когда я запускаю фрагмент кода, я получаю GMT-05: 00 (EST).

Так что это не добавление часа. Он просто выводит дату в вашем локальном часовом поясе.

+0

Правильно, это то же самое время печатается по-разному. Это можно увидеть путем печати date.toString() и date.toUTCString() – Sandman

0

Вы должны принять во внимание TimeZoneOffset Date.getTimezoneOffset() показать ту же дату в разных часовых поясах. Например, получить смещение в минутах конвертировать в часы и добавить его к вам время или написать функцию для преобразования даты с зависимым от времени часовым поясом Как here

Смежные вопросы