Как мне установить часовой пояс по умолчанию в node.js?
Как мне установить часовой пояс по умолчанию в node.js?
Ответы:
Согласно этой ветке группы 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 уже прочитал переменную окружения.
process.env.TZ = 'Europe/Amsterdam'
«хорошо, теперь, где я могу найти список всех допустимых значений, которые я могу установить?» и я не нахожу это, каждый раз.
zone.tab
файл в этом архиве.
Другой подход, который, по-видимому, работает для меня, по крайней мере, в среде Linux, состоит в том, чтобы запустить ваше приложение Node.js следующим образом:
env TZ='Europe/Amsterdam' node server.js
Это должно как минимум гарантировать, что часовой пояс установлен правильно с самого начала.
Вот 100% работающий пример получения пользовательского часового пояса Date Time в NodeJs без использования каких-либо внешних модулей:
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);
К сожалению, настройка process.env.TZ
не очень хорошо работает - в принципе, когда изменение вступит в силу, оно не определено).
Так что установка часового пояса системы перед запуском узла - ваш единственный правильный выбор.
Однако, если вы не можете этого сделать, можно использовать время узла в качестве обходного пути: узнать свое время по местному времени или по времени UTC и преобразовать их в нужный часовой пояс. См. Как использовать смещение часового пояса в Nodejs? для деталей.
Решение 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";
повторного выполнения их с префиксом .
Etc/UTC
Есть также определенные смещения, доступные в Etc
, но смещение противоположно тому, что можно было бы ожидать. Etc/GMT-1
это UTC + 1 час. Смотритеhttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Установите часовой пояс сервера и используйте синхронизацию NTP. Вот одно из лучших решений для изменения времени сервера.
Перечислить часовые пояса
timedatectl list-timezones
Чтобы установить часовой пояс
sudo timedatectl set-timezone America/New_York
Проверить часовой пояс
timedatectl
Я предпочитаю использовать часовой пояс UTC для своих серверов и баз данных. Любые преобразования должны быть обработаны на клиенте. Мы можем использовать момент.js на стороне клиента.
Также будет легко поддерживать много экземпляров,
Я знаю, что эта ветка очень старая, но я думаю, что это поможет любому, кто попал сюда из Google, как я.
В GAE Flex (NodeJs) вы можете установить переменную окружения TZ (ту, которая управляет всеми датами и часами в приложении) в файле app.yaml, я оставляю вам пример:
app.yaml
# [START env]
env_variables:
# Timezone
TZ: America/Argentina/Buenos_Aires
Вот ответ для тех, кто развертывает приложение Node.js в Amazon AWS Elastic Beanstalk . Я не видел этого документированного где-либо еще:
В разделе Configuration -> Software -> Environment Properties
просто установите пару ключ-значение TZ
и ваш часовой пояс, например America/Los Angeles
, и примените изменение.
Вы можете проверить эффект, выведя new Date().toString()
в приложение Node и обратив внимание на суффикс часового пояса.
Начиная с Узла 13 , теперь вы можете многократно устанавливать, process.env.TZ
и это будет отражаться в часовом поясе новых объектов Date. Я не знаю, использовал бы я это в производственном коде, но это определенно было бы полезно в модульных тестах.
> process.env.TZ = 'Europe/London';
'Europe/London'
> (new Date().toString())
'Fri Mar 20 2020 09:39:59 GMT+0000 (Greenwich Mean Time)'
> process.env.TZ = 'Europe/Amsterdam';
'Europe/Amsterdam'
> (new Date().toString())
'Fri Mar 20 2020 10:40:07 GMT+0100 (Central European Standard Time)'
set TZ='UTC' node index.js
Вы можете взять мгновенный часовой пояс . Это позволяет вам установить ваше местоположение, а также заботится о летнем времени.
Date
других встроенных модулей.
Иногда вы можете запускать код на виртуальном сервере в другом месте - это может испортиться при запуске NODEJS или других разновидностей.
Вот исправление, которое позволит вам легко использовать любой часовой пояс.
Проверьте здесь список часовых поясов
Просто поместите фразу о часовом поясе в скобки строки FORMAT.
В данном случае - я конвертирую EPOCH в восточный.
//RE: https://www.npmjs.com/package/date-and-time
const date = require('date-and-time');
let unixEpochTime = (seconds * 1000);
const dd=new Date(unixEpochTime);
let myFormattedDateTime = date.format(dd, 'YYYY/MM/DD HH:mm:ss A [America/New_York]Z');
let myFormattedDateTime24 = date.format(dd, 'YYYY/MM/DD HH:mm:ss [America/New_York]Z');
я работаю с этим пакетом npm unix-system-timezone
Обновление для node.js v13
Как отметил @Tom, полная поддержка icu теперь встроена в v13. Таким образом, шаги настройки могут быть опущены. Вы все еще можете настроить, как вы хотите создать или использовать icu во время выполнения: https://nodejs.org/api/intl.html
Для node.js в Windows вы можете сделать следующее:
Установите full-icu, если он был установлен, который правильно применяет локали дат
npm i full-icu
или глобально: npm i -g full-icu
Используйте 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 не рекомендуется, так как этот каталог является временным и может быть удален.
Ссылка: 1. NodeJS неправильно применяет локали дат
Вы можете настроить глобальный часовой пояс с помощью библиотеки tzdata:
npm install tzdata -y
После установите свою среду с переменной, например: TZ = Америка / Богота
И тестирование в вашем проекте:
new Date()
Я надеюсь помочь тебе
Вы можете применить часовой пояс процесса Node.js, установив переменную окружения TZ
вUTC
Так что все время будет измеряться в UTC + 00: 00
Полный список: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Пример package.json:
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
просто установите переменную окружения в вашем главном файле, например, index.js или app.js или main.js или как там у вас:
process.env.TZ = "Aisa/Tehran";
это установит часовой пояс, который будет использоваться во всем приложении узла