2015-06-22 14 views
42

Ich bin auf ein Problem gestoßen, bei dem ich die Anfangswerte eines Momentobjekts speichern muss, aber ich habe einige Probleme, die verhindern, dass sich meine Variable mit dem ursprünglichen Objekt ändert.Wie kann ich die Veränderlichkeit in moment.js umgehen?

Leider funktioniert Object.freeze() nicht, da moment.js einen "Invalid date" -Fehler zurückgibt, wenn ich versuche, das zu formatieren.

+3

Und der Code sieht aus wie ...? Wenn Sie den Anfangswert speichern möchten, speichern Sie den Zeitwert, der mit der Methode * valueOf * verfügbar ist, oder die implizite Konvertierung in Zahl. – RobG

+0

Sobald Ihre Variable gesetzt ist, wird sie gesetzt, sie wird nicht automatisch geändert, also schauen Sie sie lieber nicht wieder an –

Antwort

67

Es gibt ein Moment.js Plugin auf NPM namens frozen-moment - Sie könnten moment().freeze() anstelle von Object.freeze(moment()) verwenden.

Ansonsten hat Vanille Moment.js eine clone Methode, die Veränderlichkeit Probleme sollen Ihnen helfen, zu vermeiden, so könnte man so etwas tun:

var a = moment(), 
    b = a.clone(); // or moment(a) 

UPDATE:

Es hat zwei Jahre seit ich diese Antwort geschrieben habe. In dieser Zeit ist eine weitere Bibliothek zum Arbeiten mit Daten aufgetaucht: https://date-fns.org/

Diese Bibliothek ist standardmäßig unveränderlich und folgt einer modularen, funktionalen Architektur, was bedeutet, dass sie besser für Tree Shaking und Client- Seitenbündelung. Wenn Sie an einem Projekt arbeiten, das Webpack auf der Client-Seite ausgiebig nutzt und feststellen muss, dass Moment.js Ihnen Probleme bei der Erstellung gibt, oder selbst wenn die Veränderlichkeit von Moment.js Ihnen viele Kopfschmerzen bereitet, dann Sie sollte date-fns einen Versuch geben.

+0

Nun, ich benutze moment.js im fullCalendar Plugin und es stellt sich heraus, dass ich das Momentobjekt bekommen habe Daten aus einem späteren Zustand meiner Veranstaltung als ich sollte. Mutability-Probleme sind definitiv eine Sache mit Moment.js, aber vielen Dank für den Vorschlag und Entschuldigung, dass ich Ihre Zeit verschwendete. – Shengbo1618

+7

Sie können die Variable 'Moment' manipulieren, ohne sie zu mutieren: Verwenden Sie einfach clone() wie folgt: 'zz = moment(); zz.clone(). Add (3, 'h'). ToISOString(); ' – Quake1TF

+0

obigen Kommentar half, vielen Dank! – jones