Как установить часовой пояс по умолчанию в node.js?
Как установить часовой пояс по умолчанию в node.js?
Ответ 1
В соответствии с этот поток группы 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 уже прочитал переменную среды.
Ответ 2
Другой подход, который, по-видимому, работал у меня, по крайней мере, в среде Linux, - это запустить приложение Node.js следующим образом:
env TZ='Europe/Amsterdam' node server.js
Это должно по крайней мере гарантировать, что часовой пояс правильно установлен уже с самого начала.
Ответ 3
К сожалению, настройка process.env.TZ
работает не очень хорошо - в основном она не определяет, когда изменения вступят в силу).
Так что установка часового пояса системы перед запуском узла - ваш единственный правильный выбор.
Однако, если вы не можете этого сделать, можно использовать время узла в качестве обходного пути: узнайте свое время по местному времени или по времени UTC и преобразуйте их в нужный часовой пояс. См. Как использовать смещение часового пояса в Nodejs? для деталей.
Ответ 4
Вот 100% работающий пример получения пользовательского часового пояса Date Time в NodeJs без использования каких-либо внешних модулей:
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);
Ответ 5
Решение 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";
снова.
Ответ 6
Установите часовой пояс сервера и используйте синхронизацию NTP. Вот одно из лучших решений для изменения времени сервера.
Перечислить часовые пояса
timedatectl list-timezones
Чтобы установить часовой пояс
sudo timedatectl set-timezone America/New_York
Проверить часовой пояс
timedatectl
Я предпочитаю использовать часовой пояс UTC для своих серверов и баз данных. Любые преобразования должны быть обработаны на клиенте. Мы можем использовать момент .js на стороне клиента.
Также будет легко поддерживать много экземпляров,
Ответ 7
Здесь ответ для тех, кто развертывает приложение Node.js в Amazon AWS Elastic Beanstalk. Я не видел этого документированного где-либо еще:
Под Configuration → Software → Environment Properties
просто установите пару значений ключа TZ
и ваш часовой пояс, например, America/Los Angeles
, и примените изменение.
Вы можете проверить эффект, выведя new Date().toString()
в своем приложении Node и обратив внимание на суффикс часового пояса.
Ответ 8
Я знаю, что эта ветка очень старая, но я думаю, что это поможет любому, кто приземлился здесь из Google, как я.
В GAE Flex (NodeJs) вы можете установить переменную окружения TZ (ту, которая управляет всеми часовыми поясами дат в приложении) в файле app.yaml, я оставлю вам пример:
app.yaml
# [START env]
env_variables:
# Timezone
TZ: America/Argentina/Buenos_Aires
Ответ 9
Вы можете выбрать момент времени. Он позволяет вам установить ваше местоположение, а также заботиться о летнее время.
Ответ 10
Для node.js в Windows вы можете сделать следующее:
-
Установите full-icu, если он был установлен, который правильно применяет локали дат
npm я full-icu
или глобально:npm я -g full-icu
-
Используйте toLocaleString() в вашем коде, например:
new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })
Это будет производить что-то вроде:
25/02/2019, 3:19:22 pm
. Если вы предпочитаете 24 часа, 'en -g B' выдаст:25/02/2019, 15:19:22
Для node.js в качестве веб-приложения Azure, в дополнение к настройкам приложения WEBSITE_TIME_ZONE, вам также нужно установить для NODE_ICU_DATA, например, <your project>\node_modules\full-icu
, конечно, после того, как вы сделали npm я full-icu. Глобальная установка пакета в Azure не рекомендуется, так как этот каталог является временным и может быть удален.
Ссылка: 1. NodeJS неправильно применяет локали дат
- Вы также можете создать node.js с параметрами intl, более подробную информацию здесь
Ответ 11
в moment.js вы можете установить часовой пояс по умолчанию как
const moment = require("moment");
moment.tz.setDefault("Asia/Kolkata");
или вы можете добавить/вычесть минуты в UTC
// if your time zone is 330 minutes ahead of UTC
const currentTimeInIndia = moment().utc().add(330,'minutes')
Ответ 12
Иногда вы можете запускать код на виртуальном сервере в другом месте - это может испортить работу 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');
Ответ 13
я работаю с этим пакетом npm unix-system-timezone