Wie mache ich ein größeres oder gleiches mit Momenten (moment.js) in Javascript?


74

Grundsätzlich möchte ich eine machen myMoment >= yourMoment. Es gibt kein myMoment.isSameOrAfterund das ausschreiben isSameund .isAfterist etwas langwierig.

Was ist die Alternative? Moment in js Datum umwandeln und >=zum Vergleichen verwenden?


4
Haben Sie ein if (! Moment1.isBefore (moment2)) ausprobiert?
SamHuckaby

1
@Donal - Nun, ich debugge in Chrome und bemerke, dass myMoment == yourMoment falsch ist, aber myMoment.isSame (yourMoment) ist wahr.
johntrepreneur

@donal JavaScript unterstützt das Überladen von Operatoren nicht. Daher führen relationale Operatoren wie <, <=,> und> = tatsächlich einen Referenzvergleich durch. Wenn es also "funktioniert", ist es ein vollständiger Unfall und aufgrund der Tatsache, dass es primitive Werte für diese komplexen Objekte vergleicht.
John Zabroski

@JohnZabroski das ist nicht wahr, JS verwendet die valueOf-Prototypmethode zum Vergleichen, sodass Operatoren wie>,> =, <und <= in Moment-Instanzen gültig sind, da sie den valueOf, dh die Zeitstempel, verwenden.
Antoine129

1
@JohnZabroski Ich wiederhole, es ist garantiert eine Zahl im Fall von Moment.js: momentjs.com/docs/#/displaying/unix-timestamp-milliseconds und siehe auch stackoverflow.com/questions/22600856/…
antoine129

Antworten:



54

Okay, ich habe gerade die Funktion moment.js gewählt .diff().

myMoment.diff(yourMoment) >= 0

Nahe genug.


1
Was meinst du mit "nah genug"? Es ist genau das richtige Verhalten. Wenn Sie isOnOrAfter möchten, fügen Sie dem Moment-Prototyp einfach eine Funktion hinzu.
John Zabroski

1
Erwähnenswert ist, dass diff den Unterschied in Millisekunden zurückgibt. Wenn Sie also darüber nachdenken, diesen Wert zu erweitern, indem Sie sagen, dass nächste Woche diff (yourMoment)> = 7 ist, werden Sie scheitern. Fügen Sie außerdem nicht nur Millisekunden an einem Tag hinzu, da Zeitzonen usw. Sie durcheinander bringen.
Nick Steele

2
Wenn Sie dem Kommentar von @ NickSteele folgen, können Sie ihn mit dem zweiten Parameter für verschiedene Zeitmessungen verwenden. Beispiel: (myMoment.diff (yourMoment, 'Minuten')> = 15) oder (myMoment.diff (yourMoment, 'Tage')> = 7)
kiwicopple

6
let A = moment('2020-01-02');
let B = moment('2020-01-01');
let C = moment('2020-01-03');
console.log(A.diff(B, 'days'));// => 1
console.log(A.diff(C, 'days'));// => -1

Die unterstützten Messungen sind Jahre, Monate, Wochen, Tage, Stunden, Minuten und Sekunden momentjs.com

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.