TypeError: moment(). Tz не является функцией

При тестировании с использованием жасмина я получаю эту ошибку.

TypeError: moment.tz не является функцией

Мой код, который я пытаюсь проверить

let myDate = moment().tz(undefined, vm.timeZone).format('YYYY-MM-DD'); 

9 ответов

исправлять

Если вы используете Node.js, вы можете случайно использовать

const moment = require('moment'); //момент

вместо

const moment = require('moment-timezone'); //момент-часовой пояс

Кроме того, убедитесь, что вы установили момент-часовой пояс с

npm install moment-timezone --save

объяснение

Ошибка запроса момента без часовых поясов может возникнуть при установке момента с require('moment')позже решив npm install moment-timezone, а затем забыл обновить require,

Ниже код для меня...

import moment from 'moment';
import 'moment-timezone';

Ошибка -> TypeError: (0 , moment_timezone_1.default) не является функцией

Это ошибка машинописного текста, по умолчанию она принимает момент как функцию

Я исправляю эту проблему, заменяя

импортировать момент из «момент-часовой пояс»

импортировать * как момент из «момент-часовой пояс»

момент().tz("Америка/Лос-Анджелес").format()

для машинописного текста: работает по состоянию на апрель 2021 г.

      import moment from 'moment';
import 'moment-timezone';

cont x = moment.tz('America/Los_Angeles').format('YYYY-MM-DD HH:mm:ss ZZ');

cont y = moment().isBetween(
            moment.tz('1-1-2021', 'America/Los_Angeles'),
            moment.tz('1-1-2021', 'America/Los_Angeles').add(2, 'hours'),

Для Node.js, согласно исходной документации: документация moment js

Ты должен сделать

npm install moment-timezone

Тогда используйте это так

var moment = require('moment-timezone');
moment().tz("America/Los_Angeles").format();

Я тоже столкнулся с этой проблемой. Он работает годами, но после рефакторинга не работает. Как я выяснил,moment-timezone@0.5.13 зависит от moment@>=2.9.0, который может отличаться от moment сам.

В моем случае, moment-timezone использует moment@2.24.0, а также moment сама версия 2.18.1. Причиныmoment-timezoneоформлена неправильная версияmoment.

Я изменил yarn.lock вот так:

moment-timezone@0.5.13:
  version "0.5.13"
  resolved "https://arti-dev.ss.aws.fwmrm.net/api/npm/fw-npm/moment-timezone/-/moment-timezone-0.5.13.tgz#99ce5c7d827262eb0f1f702044177f60745d7b90"
  integrity sha1-mc5cfYJyYusPH3AgRBd/YHRde5A=
  dependencies:
    moment ">= 2.9.0"

moment@2.18.1, moment@>= 2.9.0:
  version "2.18.1"
  resolved "https://arti-dev.ss.aws.fwmrm.net/api/npm/fw-npm/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"
  integrity sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=

moment & moment-timezone в этом случае можно использовать замену друг друга.

Использование: момент-часовой пояс

      const moment = require('moment-timezone');
const time = moment.tz(1412144245453, 'America/Los_Angeles').format('MM/DD/YYYY h:mm a');
console.log("time : ", time);

Вывод: время: 30.09.2014 23:17

Очень старая ветка, но поскольку я тоже столкнулся с этой проблемой, и, как другие указывали, она работала, а затем перестала работать, я попытался разобраться, почему это происходит именно так?

Итак, у меня был следующий оператор require в

      const moment = require('moment');
moment.tz.setDefault('Europe/Berlin');

Я запустил свой проект, и он работал отлично, однако один из моих тестовых файловbar.test.jsтребовал чего-то от и когда я побежалmocha bar.test.jsмне представилиTypeError: Cannot read property 'setDefault' of undefined

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

      const moment = require('moment-timezone');

иmoment-timezoneимеет зависимость отmoment. Таким образом, он сначала загружает объект момента, а затем добавляет дополнительные функции часового пояса в качестве своего рода плагина. Затем, когда мне нужен момент в моейfoo.jsfile он выбирает объект из кеша, в котором есть функциональность. Но когда я запускаю только свой тестовый файл, этоtzфункциональность не добавляется к объекту момента и, следовательно, не работает

Поэтому необходимо иметьrequire('moment-timezone')вместоrequire('moment')

надеюсь, это поможет

Момент должен быть вызовом функции. Так что используйте let myDate = moment().tz(...)

Смотрите https://momentjs.com/timezone/docs/ для более подробной информации.

РЕДАКТИРОВАТЬ

Вы также должны убедиться, что вы добавляете расширение часового пояса к библиотеке моментов либо через правильную установку npm и требовать (для узла), либо правильные теги сценария (для общего использования браузером). См. Связанные документы для библиотек / сценариев для включения.

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