Как я могу установить часовой пояс по умолчанию в node.js? - PullRequest
116 голосов
/ 10 ноября 2011

Как мне установить часовой пояс по умолчанию в node.js?

Ответы [ 11 ]

100 голосов
/ 24 марта 2012

Согласно этой ветке группы Google , вы можете установить переменную окружения TZ перед вызовом любых функций даты.Только что протестировал, и он работает.

> process.env.TZ = 'Europe/Amsterdam' 
'Europe/Amsterdam'
> d = new Date()
Sat, 24 Mar 2012 05:50:39 GMT
> d.toLocaleTimeString()
'06:50:39'
> ""+d
'Sat Mar 24 2012 06:50:39 GMT+0100 (CET)'

Вы не можете изменить часовой пояс позже, так как к тому времени Node уже прочитал переменную окружения.

43 голосов
/ 16 февраля 2016

Другой подход, который, по-видимому, работает для меня, по крайней мере, в среде Linux, - это запустить ваше приложение Node.js следующим образом:

env TZ='Europe/Amsterdam' node server.js

Это должно как минимум гарантировать, что часовой пояс установлен правильно с самого начала.

28 голосов
/ 31 мая 2012

К сожалению, настройка process.env.TZ работает не очень хорошо - в принципе, когда изменение вступит в силу, оно неопределенно).

Поэтому установка часового пояса системы перед запуском узла - ваша единственнаяправильный вариант.

Однако, если вы не можете этого сделать, можно использовать время узла в качестве обходного пути: получите ваше время по местному или UTC времени и конвертируйте ихв нужный часовой пояс.См. Как использовать смещение часового пояса в Nodejs? для получения подробной информации.

17 голосов
/ 11 января 2018

Вот 100% рабочий пример получения пользовательского часового пояса Date Time в NodeJ без использования каких-либо внешних модулей:

const nDate = new Date().toLocaleString('en-US', {
  timeZone: 'Asia/Calcutta'
});

console.log(nDate);
14 голосов
/ 14 июля 2016

Решение env TZ='Europe/Amsterdam' node server.js от @uhef работает в тех случаях, когда ваше приложение не работает с разветвленным процессом, но когда вы работаете с разветвленным процессом, особенно когда вы запускаете свое приложение с помощью инструмента для сборки, такого как gulp , команда gulp примет значения env, но процесс, созданный gulp not (ваше приложение).

Чтобы решить эту проблему, вы должны сделать:

$ export TZ="Europe/Amsterdam"; gulp myTask

Это установит переменную среды TZ для всего процесса, запущенного в консоли, с которой вы работаете, включая все последующие процессы, выполняемые после команды gulp в той же консоли, без необходимости выполнять их с префиксом export TZ="Europe/Amsterdam"; снова.

8 голосов
/ 12 апреля 2018

Установите часовой пояс сервера и используйте синхронизацию NTP.Вот одно из лучших решений для изменения времени сервера.

Для отображения часовых поясов

timedatectl list-timezones

Чтобы установить часовой пояс

sudo timedatectl set-timezone America/New_York

Проверка часового пояса

timedatectl

Я предпочитаю использовать часовой пояс UTC для своих серверов и баз данных.Любые преобразования должны быть обработаны на клиенте.Мы можем использовать момент.js на стороне клиента.

Также будет легко поддерживать множество экземпляров,

5 голосов
/ 01 февраля 2018

Вот ответ для тех, кто развертывает приложение Node.js в Amazon AWS Elastic Beanstalk . Я не видел этого документированного больше нигде:

В Configuration -> Software -> Environment Properties просто установите пару значений ключа TZ и свой часовой пояс, например. America/Los Angeles и применить изменения.

Вы можете проверить эффект, напечатав new Date().toString() в приложении Node и обратив внимание на суффикс часового пояса.

3 голосов
/ 29 августа 2017

Я знаю, что эта ветка очень старая, но я думаю, что это поможет любому, кто попал сюда из Google, как я.

В GAE Flex (NodeJs) вы можете установить переменную окружения TZ (ту, котораяуправляет всеми датами и часовыми поясами в приложении) в файле app.yaml, оставляю вам пример:

app.yaml

# [START env]
env_variables:
  # Timezone
  TZ: America/Argentina/Buenos_Aires
2 голосов
/ 25 февраля 2019

Для node.js в Windows вы можете сделать следующее:

  1. Установить full-icu, если он был установлен, который корректно применяет локали дат

    npm i full-icu или глобально: npm i -g full-icu

  2. Используйте toLocaleString () в своем коде, например ::

    new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })

    Это даст что-то вроде: 25/02/2019, 3:19:22 pm. Если вы предпочитаете 24 часа, en-GB выдаст: 25/02/2019, 15:19:22

Для node.js в качестве веб-приложения Azure , в дополнение к настройкам приложения WEBSITE_TIME_ZONE, вам также необходимо установить NODE_ICU_DATA, например, в. <your project>\node_modules\full-icu, конечно, после того, как вы сделали npm i full-icu. Глобальная установка пакета в Azure не рекомендуется, так как этот каталог является временным и может быть удален.

Ref: 1. NodeJS неправильно применяет локали даты

  1. Вы также можете создать node.js с опциями intl, дополнительную информацию здесь
2 голосов
/ 31 октября 2015

Вы можете взять Момент часового пояса .Позволяет указать ваше местоположение, а также позаботится о переходе на летнее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...