Как загрузить функции часового пояса 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
Другие вопросы по тегам