Как загрузить функции часового пояса Luxon в оболочку Монго - PullRequest
0 голосов
/ 02 мая 2019

Я бы хотел использовать функции летнего времени и часового пояса luxon.js в сценарии оболочки, который я использую в оболочке mongodb.Это функция

DateTime.isInDST()

, за которой я работаю - в противном случае я согласен на

moment.js 

и эквивалентную реализацию.

Среда выполнения - Mongo 3.6в докер-контейнере на linux VM Сценарии 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 Ответ

0 голосов
/ 02 мая 2019

Несколько вещей:

  • Для вашей проблемы с картой, посмотрите здесь для кого-то с такими же симптомами: 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#iana-support. Если оболочка Монго не имеет Intl или достаточно новой версии Intl, вам необходимо заполнить ее с помощью https://github.com/yahoo/date-time-format-timezone
...