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

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.


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 moment@2.24.0. Ich weiß nicht warum, aber npm wird moment-timezonemit einem Sub-Repository installiert node_modulesund moment@2.24.0daher 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';

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();

3

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.13kommt es darauf an moment@>=2.9.0, was sich von sich momentselbst unterscheiden könnte.

In meinem Fall moment-timezoneverwendet moment@2.24.0und 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.


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


2
scheitert mit - Moment (...). tz ist keine Funktion
Sanath
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.