Уверен, ты не сможешь этого сделать. Измените настройки часового пояса системы.
thejh
1
thejh правильно, вы не можете изменить часовой пояс. Используйте библиотеку времени JS (например, moment.js) и вместо этого добавляйте / вычитайте часы.
Alessioalex
2
Самый простой и правильный способ сделать это - просто изменить часовой пояс вашей системы.
Munim
1
Это полезные комментарии, но большую часть времени вы не являетесь системным администратором;)
Марио де Вера
Ответы:
136
Согласно этой ветке группы Google , вы можете установить переменную окружения TZ перед вызовом любых функций даты. Только что проверил и все работает.
> process.env.TZ ='Europe/Amsterdam''Europe/Amsterdam'> d =newDate()Sat,24Mar201205:50:39 GMT
> d.toLocaleTimeString()'06:50:39'>""+d
'Sat Mar 24 2012 06:50:39 GMT+0100 (CET)'
Вы не можете изменить часовой пояс позже, так как к тому времени Node уже прочитал переменную окружения.
Это интересно. Обсуждение ошибки предполагает, что это связано с многопоточностью. Но пример менял process.env.TZ несколько раз. Похоже, установка одного раза в начале и оставление в покое работает. Спасибо lorancou за ссылку на время узла для более гибкой и надежной обработки.
webjprgm
6
К сожалению, это не работает в Windows. Хорошо работает в Mac OS-X и Unix
Ритеш Кумар Гупта
15
Хороший ответ. К сожалению, каждый раз, когда я вижу что-то вроде process.env.TZ = 'Europe/Amsterdam' «хорошо, теперь, где я могу найти список всех допустимых значений, которые я могу установить?» и я не нахожу это, каждый раз.
Рафаэль Эйнг
5
@RafaelEyng IANA (Международная ассоциация назначенных номеров) часто используется для предоставления современных конфигураций часовых поясов. Вы можете найти последние настройки часового пояса здесь: ftp.iana.org/tz/tzdata-latest.tar.gz Для просмотра возможных строк часового пояса проверьте zone.tabфайл в этом архиве.
JohannesB
9
@RafaelEyng: как упомянул JohannesB, iana.org/time-zones является официальным источником, но с форматом данных с ним сложно работать. Я считаю, что намного проще работать из en.wikipedia.org/wiki/List_of_tz_database_time_zones , который построен из набора данных IANA (в настоящее время версия 2017c).
Питер Руст
66
Другой подход, который, по-видимому, работает для меня, по крайней мере, в среде Linux, состоит в том, чтобы запустить ваше приложение Node.js следующим образом:
env TZ='Europe/Amsterdam' node server.js
Это должно как минимум гарантировать, что часовой пояс установлен правильно с самого начала.
Я озадачен - это очень одобрено, но у него есть критическая проблема IMO. Версии узла <13 имеют данные о локали только для «en-us», что означает, что они выбрасывают (в некоторых случаях) или дают неправильный формат даты для любой другой страны. И во многих случаях дата будет выглядеть правильно, но день и месяц меняются местами! И Node 13 был выпущен всего несколько недель назад, так что эта проблема касается практически всех.
Том
Я вижу, что ответ @Marshall ниже предлагает способ решить эту проблему в некоторых ситуациях (не будет работать в Lambda и других FaaS).
Так что установка часового пояса системы перед запуском узла - ваш единственный правильный выбор.
Однако, если вы не можете этого сделать, можно использовать время узла в качестве обходного пути: узнать свое время по местному времени или по времени UTC и преобразовать их в нужный часовой пояс. См. Как использовать смещение часового пояса в Nodejs? для деталей.
Время модуля npm отлично сработало для меня. я установил на utc, затем установил все время, используя utc, поэтому код переносим между разными машинами с разными часовыми поясами.
Марк Шуст в M.academy
Проблем с этим больше нет, не так ли?
Blok
16
Решение 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";повторного выполнения их с префиксом .
Так как в Амстердаме есть летнее время, это все еще желательный tz для достижения "полуночного UTC" в GMT +1?
FlavorScape,
1
@FlavorScape, который я использую. Etc/UTC Есть также определенные смещения, доступные в Etc, но смещение противоположно тому, что можно было бы ожидать. Etc/GMT-1это UTC + 1 час. Смотритеhttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
npskirk
9
Установите часовой пояс сервера и используйте синхронизацию NTP. Вот одно из лучших решений для изменения времени сервера.
Перечислить часовые пояса
timedatectl list-timezones
Чтобы установить часовой пояс
sudo timedatectl set-timezone America/New_York
Проверить часовой пояс
timedatectl
Я предпочитаю использовать часовой пояс UTC для своих серверов и баз данных. Любые преобразования должны быть обработаны на клиенте. Мы можем использовать момент.js на стороне клиента.
Хотя moment.js был отличной библиотекой того времени, в настоящее время есть гораздо меньшие альтернативы (например, date-fns ). Момент огромен ; пожалуйста, не рекомендуйте его для клиентских приложений.
Дан Даскалеску
5
Я знаю, что эта ветка очень старая, но я думаю, что это поможет любому, кто попал сюда из Google, как я.
В GAE Flex (NodeJs) вы можете установить переменную окружения TZ (ту, которая управляет всеми датами и часами в приложении) в файле app.yaml, я оставляю вам пример:
Начиная с Узла 13 , теперь вы можете многократно устанавливать, process.env.TZи это будет отражаться в часовом поясе новых объектов Date. Я не знаю, использовал бы я это в производственном коде, но это определенно было бы полезно в модульных тестах.
> process.env.TZ ='Europe/London';'Europe/London'>(newDate().toString())'Fri Mar 20 2020 09:39:59 GMT+0000 (Greenwich Mean Time)'> process.env.TZ ='Europe/Amsterdam';'Europe/Amsterdam'>(newDate().toString())'Fri Mar 20 2020 10:40:07 GMT+0100 (Central European Standard Time)'
Момент довольно тяжелый для такой задачи, и я бы не рекомендовал ее, если только желаемое поведение невозможно с помощью Dateдругих встроенных модулей.
Крис Уильямсон
2
Иногда вы можете запускать код на виртуальном сервере в другом месте - это может испортиться при запуске NODEJS или других разновидностей.
Вот исправление, которое позволит вам легко использовать любой часовой пояс.
Как отметил @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 не рекомендуется, так как этот каталог является временным и может быть удален.
Это не работает в Windows. Вы не можете установить TZ env var таким образом. И если вы установите TZ, он не будет распознаваться как часовой пояс по умолчанию для узла.
Nate
-1
просто установите переменную окружения в вашем главном файле, например, index.js или app.js или main.js или как там у вас:
process.env.TZ ="Aisa/Tehran";
это установит часовой пояс, который будет использоваться во всем приложении узла
Ответы:
Согласно этой ветке группы Google , вы можете установить переменную окружения TZ перед вызовом любых функций даты. Только что проверил и все работает.
Вы не можете изменить часовой пояс позже, так как к тому времени Node уже прочитал переменную окружения.
источник
process.env.TZ = 'Europe/Amsterdam'
«хорошо, теперь, где я могу найти список всех допустимых значений, которые я могу установить?» и я не нахожу это, каждый раз.zone.tab
файл в этом архиве.Другой подход, который, по-видимому, работает для меня, по крайней мере, в среде Linux, состоит в том, чтобы запустить ваше приложение Node.js следующим образом:
Это должно как минимум гарантировать, что часовой пояс установлен правильно с самого начала.
источник
Вот 100% работающий пример получения пользовательского часового пояса Date Time в NodeJs без использования каких-либо внешних модулей:
источник
К сожалению, настройка
process.env.TZ
не очень хорошо работает - в принципе, когда изменение вступит в силу, оно не определено).Так что установка часового пояса системы перед запуском узла - ваш единственный правильный выбор.
Однако, если вы не можете этого сделать, можно использовать время узла в качестве обходного пути: узнать свое время по местному времени или по времени UTC и преобразовать их в нужный часовой пояс. См. Как использовать смещение часового пояса в Nodejs? для деталей.
источник
Решение
env TZ='Europe/Amsterdam' node server.js
от @uhef работает в тех случаях, когда ваше приложение не работает с разветвленным процессом, но когда вы работаете с разветвленным процессом, особенно когда вы запускаете свое приложение с помощью инструмента сборки, такого как gulp , командаgulp
примет значения env, но процесс, созданный gulp not (ваше приложение).Чтобы решить эту проблему, вы должны сделать:
Это установит
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. Вот одно из лучших решений для изменения времени сервера.
Перечислить часовые пояса
Чтобы установить часовой пояс
Проверить часовой пояс
Я предпочитаю использовать часовой пояс UTC для своих серверов и баз данных. Любые преобразования должны быть обработаны на клиенте. Мы можем использовать момент.js на стороне клиента.
Также будет легко поддерживать много экземпляров,
источник
Я знаю, что эта ветка очень старая, но я думаю, что это поможет любому, кто попал сюда из Google, как я.
В GAE Flex (NodeJs) вы можете установить переменную окружения TZ (ту, которая управляет всеми датами и часами в приложении) в файле app.yaml, я оставляю вам пример:
app.yaml
источник
Вот ответ для тех, кто развертывает приложение Node.js в Amazon AWS Elastic Beanstalk . Я не видел этого документированного где-либо еще:
В разделе
Configuration -> Software -> Environment Properties
просто установите пару ключ-значениеTZ
и ваш часовой пояс, напримерAmerica/Los Angeles
, и примените изменение.Вы можете проверить эффект, выведя
new Date().toString()
в приложение Node и обратив внимание на суффикс часового пояса.источник
Начиная с Узла 13 , теперь вы можете многократно устанавливать,
process.env.TZ
и это будет отражаться в часовом поясе новых объектов Date. Я не знаю, использовал бы я это в производственном коде, но это определенно было бы полезно в модульных тестах.источник
set TZ='UTC' node index.js
Вы можете взять мгновенный часовой пояс . Это позволяет вам установить ваше местоположение, а также заботится о летнем времени.
источник
Date
других встроенных модулей.Иногда вы можете запускать код на виртуальном сервере в другом месте - это может испортиться при запуске NODEJS или других разновидностей.
Вот исправление, которое позволит вам легко использовать любой часовой пояс.
Проверьте здесь список часовых поясов
Просто поместите фразу о часовом поясе в скобки строки FORMAT.
В данном случае - я конвертирую EPOCH в восточный.
источник
я работаю с этим пакетом 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:
После установите свою среду с переменной, например: TZ = Америка / Богота
И тестирование в вашем проекте:
Я надеюсь помочь тебе
источник
Вы можете применить часовой пояс процесса Node.js, установив переменную окружения
TZ
вUTC
Так что все время будет измеряться в UTC + 00: 00
Полный список: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Пример package.json:
источник
просто установите переменную окружения в вашем главном файле, например, index.js или app.js или main.js или как там у вас:
это установит часовой пояс, который будет использоваться во всем приложении узла
источник