Откуда Node.js получает свой часовой пояс и как я могу установить его глобально?

Я использую Windows 10 Professional, и мои настройки часового пояса и региона установлены на Брисбен/Австралия (UTC+ 10:00). Кроме того, я запускаю Node.js в своей системе для приложения, которое я создаю.

Я выполнил следующее в Node.js:

  var x = new Date();
  console.log(x);

Он вернул следующее:

2017-09-07T23:42:33.719Z

Обратите внимание на Z в конце строки даты и времени? Это представляет зулусское время. (UTC + 0)

Я предполагаю, что это установлено по умолчанию в Node.js, когда часовой пояс не указан. Как я могу указать часовой пояс глобально в Node.js, чтобы гарантировать, что все объекты даты возвращаются правильно?


person cleverpaul    schedule 08.09.2017    source источник
comment
Нет, Z представляет UTC ~ en.wikipedia.org/wiki/ISO_8601#UTC. Вы видите это, потому что консоль представляет вашу дату в виде строки через Date.prototype.toISOString(). Попробуйте console.log(x.toString()) или console.log(x.toLocaleString())   -  person Phil    schedule 08.09.2017
comment
Извините, я не имел в виду, что вы ошиблись насчет зулусского времени. Надеюсь не так попалось   -  person Phil    schedule 08.09.2017
comment
Разве время Зулу не просто другое название UTC (и оба они представлены Z)?   -  person    schedule 08.09.2017
comment
Здесь есть несколько вопросов. Вы спрашиваете, как показать местный часовой пояс? Или как настроить узел для использования другого часового пояса? Или вы просто хотите знать, как Node работает внутри?   -  person Matt Johnson-Pint    schedule 08.09.2017
comment
@ МэттДжонсон Да.   -  person cleverpaul    schedule 11.09.2017


Ответы (1)


Вы можете установить TZ env в строку часового пояса.

Например:

$ export TZ=Europe/Amsterdam
$ node

> Date()
'Fri Sep 08 2017 03:02:57 GMT+0200 (CEST)'


$ export TZ=America/Anchorage
$ node

> Date()
'Thu Sep 07 2017 17:04:46 GMT-0800 (AKDT)'

Вы также можете установить process.env.TZ во время выполнения:

> process.env.TZ = 'Antarctica/Mawson'

> Date()
'Thu Sep 07 2017 17:11:00 GMT-0800 (+05)'

Обратите внимание, что независимо от часового пояса new Date() возвращает UTC 2017-09-08T01:05:58.103Z при таком вызове.

person Mark    schedule 08.09.2017
comment
Это работает только в системах *nix/OSX. Это не работает в Windows. ОП сказал, что они работают на Windows 10. - person Matt Johnson-Pint; 08.09.2017
comment
Хм. Спасибо за разъяснение @MattJohnson - person Mark; 08.09.2017
comment
Я поменял ТЗ как вы сказали, но у меня 2 проблемы. 1: часовой пояс в узле изменен, но в pm2 мои приложения работают как раньше (с UTC). 2: когда я перезапускаю свои CentO, TZ сбрасывается на UTC :( - person Mahdi Tahsildari; 29.04.2019