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.js
file он выбирает объект из кеша, в котором есть функциональность. Но когда я запускаю только свой тестовый файл, этоtz
функциональность не добавляется к объекту момента и, следовательно, не работает
Поэтому необходимо иметьrequire('moment-timezone')
вместоrequire('moment')
надеюсь, это поможет
Момент должен быть вызовом функции. Так что используйте let myDate = moment().tz(...)
Смотрите https://momentjs.com/timezone/docs/ для более подробной информации.
РЕДАКТИРОВАТЬ
Вы также должны убедиться, что вы добавляете расширение часового пояса к библиотеке моментов либо через правильную установку npm и требовать (для узла), либо правильные теги сценария (для общего использования браузером). См. Связанные документы для библиотек / сценариев для включения.