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');
javascript
unit-testing
jasmine
momentjs
Sanath
quelle
quelle
moment(new Date())
mit nur ersetzenmoment()
. 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[email protected]
. Ich weiß nicht warum, aber npm wirdmoment-timezone
mit einem Sub-Repository installiertnode_modules
und[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 wirdnpm
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';
quelle
import moment from 'moment-timezone'
Für Node.js laut Originaldokumentation: Moment js Dokumentation
Du solltest tun
Dann benutze es so
var moment = require('moment-timezone'); moment().tz("America/Los_Angeles").format();
quelle
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 anmoment@>=2.9.0
, was sich von sichmoment
selbst unterscheiden könnte.In meinem Fall
moment-timezone
verwendet[email protected]
undmoment
selbst Version ist2.18.1
. Ursachenmoment-timezone
dekoriert falsche Version vonmoment
.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.quelle
Moment sollte ein Funktionsaufruf sein. Also benutze
let 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 hattelet myDate = moment.tz(undefined, vm.timeZone).format('YYYY-MM-DD');
quelle