TypeError: moment (). Tz ist keine Funktion

72

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'); 
Sanath
quelle

Antworten:

138

Fix

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

Erläuterung

Der Fehler, einen Moment ohne Zeitzonen zu benötigen, kann auftreten, indem Moment mit installiert wird require('moment'), später entschieden npm install moment-timezonewird und dann vergessen wird, den zu aktualisieren require.

Matt Goodrich
quelle
4
Irgendwelche Ideen, warum dies auf meinem lokalen Computer mit Moment (seit Jahren) funktioniert und heute den Fehler heute auslöst? Die Verwendung von "Moment" funktioniert auch lokal auf meinem Computer, jedoch nicht auf dem Computer des Kollegen. Dies funktioniert beispielsweise wie folgt: const moment = require ('moment'); var date = moment (neues Datum ()). tz ('America / New_York'). format ('TTT. MMMM Do JJJJ, h: mm a'); (das funktioniert für mich)
Matt Kim
1
Ich verstehe Ihre erste Frage nicht ganz. Könnten Sie bitte umformulieren? Sie können 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).
Matt Goodrich
1
Ich bin gerade auch an meiner Maschine kaputt gegangen. Ich habe mich nur gefragt, warum es vorher nicht so war.
Kevin Amiranoff
1
@ MattKim Ich habe das gleiche Problem. Wenn ich laufe npm i, installiert es meine [email protected]. Ich weiß nicht warum, aber npm wird moment-timezonemit einem Sub-Repository installiert node_modulesund [email protected]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 npmdies jedes Mal auf meinem Computer ausgeführt? Ich verwende auf beiden Computern dieselbe npm-Version.
Patrick Portal
3
@ MattKim Schließlich war es ein Problem mit dem package-lock.json, löschen Sie es / npm iund es behebt das Problem: /
Patrick Portal
33

Unten Code für mich ...

import moment from 'moment';
import 'moment-timezone';
Purushottam Sadh
quelle
1
Vielen Dank! Ich wusste nicht, dass Sie Moment-Timezone installieren müssen.
PeeJee
Das hat fast zwei Jahre lang funktioniert, jetzt musste ichimport moment from 'moment-timezone'
Petros Kyriakou
5

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();
Gadani
quelle
3

Ich bin auch auf dieses Problem gestoßen. Es funktioniert seit Jahren, aber nach einem Refactor funktioniert es nicht. Wie ich untersucht habe, [email protected]kommt es darauf an moment@>=2.9.0, was sich von sich momentselbst unterscheiden könnte.

In meinem Fall moment-timezoneverwendet [email protected]und momentselbst Version ist 2.18.1. Ursachen moment-timezonedekoriert 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-timezonekönnte in diesem Fall als Ersatz für einander verwendet werden.

Xu Tongbin
quelle
-2

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, momentder 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');

John
quelle
2
scheitert mit - Moment (...). tz ist keine Funktion
Sanath