Для дат вы можете (и, по моему мнению) определять их в формате UTC ISO 8601 "Z" ("ГГГГ-ММ-ДДТЧ: ММ: ССЗ"), так же, как вы это сделали.
Однако, чтобы получить удобное для пользователя строковое представление этих дат, это будет зависеть от вашего клиента и используемого движка Javascript.Вы можете ограничить вывод, если вы явно укажете эталонный часовой пояс с toLocaleString()
.
var date = new Date("1990-01-01T01:00:00Z");
console.log(date.toLocaleString("en-US", {timeZone: "Asia/Jerusalem"}));
console.log(date.toLocaleString("en-US", {timeZone: "Europe/Moscow"}));
console.log(date.toLocaleString("en-US", {timeZone: "Africa/Djibouti"}));
// output on my machine, should be the same on yours :
// 1/1/1990, 3:00:00 AM
// 1/1/1990, 4:00:00 AM
// 1/1/1990, 4:00:00 AM
console.log(date.toString());
// output **on my machine**, should **not** be the same on yours
// Mon Jan 01 1990 02:00:00 GMT+0100 (Central European Standard Time)
Для проблемы 16 секунд это связано со способом смещения, определяемым правилами для этих дат перед понятием IANAчасовой пояс существует.
Они, вероятно, не имеют смысла в вашем приложении, и я не рекомендую вам использовать такие даты, как 1 января года 0001, в качестве примеров.
Примеры:
var date = new Date("0001-01-01T01:00:00Z");
console.log(date.toLocaleString("en-US", {timeZone: "Asia/Jerusalem"}));
console.log(date.toLocaleString("en-US", {timeZone: "Europe/Moscow"}));
console.log(date.toLocaleString("en-US", {timeZone: "Africa/Djibouti"}));
// output on my machine, should be the same on yours :
// 1/1/1, 3:20:54 AM
// 1/1/1, 3:30:17 AM
// 1/1/1, 3:27:16 AM
console.log(date.toString());
// output **on my machine**, should **not** be the same on yours
// Mon Jan 01 0001 01:09:21 GMT+0009 (Central European Standard Time)
Больше информации здесь (спасибо Йохану Карлссону за ссылку):
https://bugs.chromium.org/p/chromium/issues/detail?id=849404
Самый актуальный комментарий отэта ссылка, я думаю:
Это работает как задумано и работает в соответствии со спецификацией.В спецификации говорится, что мы должны следовать базе данных часовых поясов IANA.
В 1880 году не было стандартного часового пояса, а смещение часового пояса Америки / Лос-Анджелеса основывалось на его долготе.То же самое относится и к другим часовым поясам.
Также обратите внимание, что во всем мире существует множество часовых поясов, смещение зон (и наличие или отсутствие летнего времени или время начала летнего времени) неоднократно менялось даже с 2000 года (например, Европа / Москва).Изменения в их правильной работе также привели к тому, что сообщается здесь.