Beim Testen mit Jasmin wird dieser Fehler angezeigt.
TypeError: moment.tz ist keine Funktion
Mein Code, den ich zu testen versuche, ist
let myDate = moment().tz(undefined, vm.timeZone).format('YYYY-MM-DD');
Antworten:
Wenn Sie Node.js verwenden, verwenden Sie möglicherweise versehentlich
const moment = require('moment');
// Moment
Anstatt von
const moment = require('moment-timezone');
// Moment-Zeitzone
Stellen Sie außerdem sicher, dass Sie moment-timezone mit installiert haben
npm install moment-timezone --save
Der Fehler, einen Moment ohne Zeitzonen zu benötigen, kann auftreten, indem Moment mit installiert wird require('moment')
, später entschieden npm install moment-timezone
wird und dann vergessen wird, den zu aktualisieren require
.
moment(new Date())
mit nur ersetzen moment()
. Ich habe meine Antwort mit den npm-Installationsbefehlen bearbeitet. Versuchen Sie es daher erneut in allen Umgebungen (Ihrem lokalen Computer, dem Computer Ihres Kollegen, den Produktionsmaschinen).
npm i
, installiert es meine moment@2.24.0
. Ich weiß nicht warum, aber npm wird moment-timezone
mit einem Sub-Repository installiert node_modules
und moment@2.24.0
daher wird der Moment, den ich benutze, nicht aktualisiert. In der Produktion habe ich dieses sub node_module-Verzeichnis nicht mit dem falschen Moment. Warum wird npm
dies jedes Mal auf meinem Computer ausgeführt? Ich verwende auf beiden Computern dieselbe npm-Version.
package-lock.json
, löschen Sie es / npm i
und es behebt das Problem: /
Unten Code für mich ...
import moment from 'moment';
import 'moment-timezone';
import moment from 'moment-timezone'
Für Node.js laut Originaldokumentation: Moment js Dokumentation
Du solltest tun
npm install moment-timezone
Dann benutze es so
var moment = require('moment-timezone');
moment().tz("America/Los_Angeles").format();
Ich bin auch auf dieses Problem gestoßen. Es funktioniert seit Jahren, aber nach einem Refactor funktioniert es nicht. Wie ich untersucht habe, moment-timezone@0.5.13
kommt es darauf an moment@>=2.9.0
, was sich von sich moment
selbst unterscheiden könnte.
In meinem Fall moment-timezone
verwendet moment@2.24.0
und moment
selbst Version ist 2.18.1
. Ursachen moment-timezone
dekoriert falsche Version von moment
.
Ich habe das Garn wie folgt gewechselt:
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
könnte in diesem Fall als Ersatz für einander verwendet werden.
Moment sollte ein Funktionsaufruf sein. Also benutzelet myDate = moment().tz(...)
Weitere Informationen finden Sie unter https://momentjs.com/timezone/docs/ .
BEARBEITEN
Sie sollten auch sicherstellen, dass Sie die Zeitzonenerweiterung für die Moment-Bibliothek entweder durch die korrekte Installation und Anforderung von npm (für Node) oder durch die richtigen Skript-Tags (für die allgemeine Verwendung durch den Browser) einschließen. In den verknüpften Dokumenten finden Sie Informationen zu den einzuschließenden Bibliotheken / Skripten.
ZWEITE BEARBEITUNG
Sollte jemand eine Frage mit einer akzeptierten Antwort von +120 so weit gescrollt haben:
Der Vorschlag, moment
der eine Funktion war und Klammern erfordert, bezieht sich auf die nicht bearbeitete Version der geposteten Frage, die die Syntax hatte
let myDate = moment.tz(undefined, vm.timeZone).format('YYYY-MM-DD');