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?

johntrepreneur
quelle
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:

144

Sie können die isSameOrAfterMethode in momentjs verwenden:

moment1.isSameOrAfter(moment2);
Daniel0b1b
quelle
4
Nur verfügbar in moment.js Version 2.10.7+
johntrepreneur
7
Zu isSameOrBefore
Ihrer Information
54

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

myMoment.diff(yourMoment) >= 0

Nahe genug.

johntrepreneur
quelle
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

Tuananh
quelle