Объект JavaScript Date
JavaScript отслеживает время в UTC внутренне, но обычно принимает вход и выход в локальное время компьютера, на котором он запущен. У этого нет никаких средств для работы со временем в других часовых поясах. Вы можете анализировать и выводить даты, которые являются UTC или Local, но вы не можете напрямую работать с другими часовыми поясами.
Чтобы быть абсолютно точным, внутреннее представление объекта Date
- это единственное число, представляя количество миллисекунд, прошедших с момента 1970-01-01 00:00:00 UTC
, независимо от секунд прыжка. В объекте Date нет часового пояса или строкового формата. Когда используются различные функции объекта Date
, локальный часовой пояс компьютера применяется к внутреннему представлению. Если функция выдает строку, тогда локальная информация компьютера может быть принята во внимание, чтобы определить, как создать эту строку. Информация зависит от каждой функции, а некоторые из них специфичны для реализации.
К счастью, есть библиотеки, которые могут это сделать. Они реализуют стандартную базу данных о часовых поясах Olson / IANA в JavaScript. У некоторых есть накладные расходы, если вы работаете в веб-браузере, так как база данных может быть немного большой, если вы хотите все это. К счастью, многие из этих библиотек позволяют выборочно выбирать зоны, которые вы хотите поддерживать, делая размер данных более приемлемым. Некоторые из них используют современные функции для получения данных о часовых поясах из API Intl
, а не для их отправки.
Для этого есть несколько библиотек:
Luxon, вероятно, является самой безопасной ставкой для всего современного использования и является самым легким весом, поскольку он использует API Intl
для его данные о часовом поясе.
Момент-часовой пояс является расширением moment.js и приводит к его собственным данным часового пояса.
js-joda - это JavaScript реализация Joda-Time API (с Java) и включает поддержку часового пояса через отдельный модуль.
BigEasy / TimeZone также находится на правильном пути.
WallTime- js достиг конца жизни , а владельцы мигрируют в момент-время.
TimeZoneJS был вокруг самого длинного, но, как известно, имеют некоторые давние ошибки, особенно при переходах на летнее время. Надеюсь, они будут исправлены в какой-то момент в будущем.
tz.js также существует некоторое время, но не очень хорошо документировано, IMHO.
Вы должны оценить эти библиотеки, чтобы увидеть, что будет отвечать вашим потребностям. Если вы не уверены, перейдите с моментом / моментом-временем.
Если вы можете ограничить свое использование в современных веб-браузерах, теперь вы можете сделать следующее без каких-либо специальных Библиотеки:
new Date().toLocaleString("en-US", {timeZone: "America/New_York"})
Это не комплексное решение, но оно работает для многих сценариев, которые требуют только преобразования вывода (от UTC или местного времени до определенного часового пояса, но не в другом направлении). Это часть API интернационализации ECMAScript (ECMA-402). Подробнее см. В этой записи . Эта таблица совместимости отслеживает, какие версии поддерживаются. Это API Intl
, упомянутый выше, что некоторые библиотеки теперь используют внутренне.
Вам нужно будет указать, что именно у вас есть в Словаре данных, чтобы было легче увидеть, в чем вы ошибаетесь.
Используя предоставленную вами информацию, я предполагаю, что ваш словарь данных выглядит следующим образом?
<group name="NoMDEntryTypes" required="N">
</group>
Однако MDEntryType должен быть внутри повторяющейся группы NoMDEntryTypes, как показано ниже.
<group name="NoMDEntryTypes" required="N">
<field name="MDEntryType" required="N"/>
</group>