Текущие правила летнего времени Node JS для Чили

Согласно спецификациям, Node JS (ES5) должен использовать текущие правила dts при работе с объектами Date. Текущий означает «на данный момент», а не на конкретную дату. Это не идеально, но на данный момент мне достаточно.

В настоящее время эти правила неверны (из-за изменений в законодательстве Чили).

Простой зонд:

console.info(new Date()) 
Mon Apr 08 2019 12:48:08 GMT-0300 (Chile Summer Time) {}

показывает «(Летнее время Чили)» в конце строки toString по умолчанию для даты. На самом деле сейчас не летнее время (оно закончилось два дня назад), и текущее смещение должно быть -4, а не -3.

Я попытался обновить Node до последней стабильной версии, и это не сработало. Я не хочу менять много кода (в производстве), чтобы использовать moment.js или его эквивалент.

Есть ли способ обновить правила перехода на летнее время в существующей установке Node JS?

заранее спасибо

-- Редактировать --

Переменная среды TZ пуста.

Протестировано на Mac OSX (Mojave 10.14.4) и Red Hat (4.8.5-36)

moment.js правильно распознает зону ("Америка/Сантьяго" с moment.tz.guess())

Возможный дубликат Летнее время неправильно определено Node.js

Nino Filiu 08.04.2019 18:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
1
641
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Упомянутое вами изменение для Чили было частью Версия данных IANA TZ 2018f, выпущенного в октябре 2018 года.

Node предоставляет версию tz через process.versions.tz. Текущая поставляемая версия 10.15.3 LTS возвращает 2018e, что объясняет, почему вы не видите обновление. Я предполагаю, что это будет обновлено в будущем.

Node получает свои данные IANA через ICU. Существуют инструкции для различных способов компиляции поддержки Node ICU (system-icu, small-icu, full-icu), задокументированные здесь, которые применяются, если вы сами создаете Node из исходного кода. Увы, я не могу найти никакого механизма для обновления данных Node ICU напрямую, без самостоятельной сборки Node.

У ICU есть документация о том, как обновить данные о часовом поясе, не обновляя все ICU. однако я нигде не вижу, чтобы Node использовал эту возможность.

Таким образом, когда дело доходит до обновления данных часового пояса Node — либо это невозможно сделать в настоящее время, либо это плохо документировано. Извините, у меня нет лучшего ответа для вас, чем этот.

Вы сказали, что уже использовали момент-часовой пояс, который независимо отправляет данные о часовом поясе. Если вы используете только моментные функции (а не объект Date), вы должны получить правильный результат.

Спасибо, Мэтт ... отличное объяснение. К сожалению, версия 11.13.0 продолжает использовать 2018e.

Jota 09.04.2019 03:09

Другие вопросы по теме