Як встановити часовий пояс за замовчуванням у 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% робочий приклад для отримання користувальницького часу з часовим поясом у 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 для своїх серверів та баз даних. Будь-які конверсії повинні здійснюватися клієнтом. Ми можемо використовувати moment.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
і це відображатиметься в часовому поясі нових об’єктів Дати. Я не знаю, чи використовував би це я у виробничому коді, але це, безумовно, було б корисно в одиничних тестах.
> 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()
Я сподіваюся, helpyou
Ви можете застосувати часовий пояс процесу 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";
це встановить часовий пояс, який буде використовуватися у всій програмі вузла