Как установить часовой пояс по умолчанию в 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 вы можете сделать следующее:

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

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

  2. Используйте 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 неправильно применяет локали дат

  1. Вы также можете создать 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