Как загрузить функции часового пояса Luxon в оболочку Монго
Я хотел бы использовать функции летнего времени и часового пояса luxon.js в сценарии оболочки, который я использую в оболочке mongodb. Это
DateTime.isInDST()
функция, которую я после - Если это не удастся, я согласен
moment.js
и эквивалентная реализация.
Среда выполнения - Mongo 3.6, запущенная в док-контейнере на виртуальной машине Linux. Скрипты VirtualBOX, отправляемые из командной строки (изнутри cygwin csh).
Я вытащил местную копию
https://moment.github.io/luxon/global-filled/luxon.js
который (я думал) должен включать все зависимости.
Эта информация доступна скрипту через load(); заявление
Однако я получаю ошибку
TypeError: "_cache.has is not a function"
Глядя на исходный файл, я вижу здесь оскорбительную строку - строку 2008 года.
if (typeof _cache !== "undefined") {
if (_cache.has(Class)) return _cache.get(Class);
_cache.set(Class, Wrapper);
}
....
}
переменная _cache объявлена несколькими строками ранее - строка 1998.
function _wrapNativeSuper(Class) {
var _cache = typeof Map === "function" ? new Map() : undefined;
...
}
Я предполагаю, что "Карта" определена ранее. Поэтому я взломал код, чтобы быть
var _cache = undefined; //I read somewhere that it doesn't need to be pre-defined
....
Я также проверил весь свой код и не смог найти ничего, определенного как "Карта" - так что я не думаю, что существует локальное столкновение имен.
В этот момент я, кажется, хромаю. Я могу создавать экземпляры и получить доступ к функции
DateTime.local(); and
DateTime.toString();
и получите правильные значения UTC.
Обратите внимание, однако, вместо того, чтобы использовать "DateTime" в качестве глобальной переменной (как это задокументировано), я обнаружил, что должен был использовать
luxon.DateTime
(поскольку "luxon" - это переменная, объявленная в источнике)
Однако, когда я кодирую
var now = luxon.DateTime.local();
var now_tz = now.setZone( "America/Los_Angeles" );
trace("time after tz:"+ now_tz.toString()+" reason:" +now_tz.invalidReason+ " explanation:"+now_tz.invalidExplanation);
trace("zone support is:"+luxon.Info.features().zones);
я получил
time after tz:Invalid DateTime reason:unsupported zone explanation:the zone "America/Los_Angeles" is not supported
zone support is:false
Какой тип подсказывает, что оболочка Mongodb не имеет поддержки зоны (если только ранние хаки не сделали эту поддержку недействительной).
Мой вопрос: как мне добавить поддержку зоны. И почему инстанцирование через luxon.js не работает так, как задокументировано.
Спасибо за любые предложения
1 ответ
Несколько вещей:
- Если у вас проблема с картой, обратитесь к кому-то с такими же симптомами: https://github.com/moment/luxon/issues/459. Уверен, что вы (или, возможно, Монго) должны иметь
Map
определено где-то. И эта вещь не имеетhas
определены. - Мировой экспорт Luxon
luxon
, Итакluxon.DateTime
ожидается. Смотрите, например, здесь: https://moment.github.io/luxon/ - Среда должна обеспечивать поддержку часовых поясов через Intl API. См. Документы Luxon по этому адресу: https://moment.github.io/luxon/docs/manual/zones.html. Если оболочка Mongo не имеет Intl или достаточно новой версии Intl, вам необходимо заполнить ее с помощью https://github.com/yahoo/date-time-format-timezone