So vergleichen Sie nur das Datum in moment.js

106

Ich bin neu bei moment.js. Ich habe ein Datumsobjekt und es hat einige Zeit damit verbunden. Ich möchte nur überprüfen, ob dieses Datum größer oder gleich dem heutigen Datum ist, ausgenommen die Uhrzeit beim Vergleich.

 var dateToCompare = 2015-04-06T18:30:00.000Z

Ich möchte nur überprüfen, ob dateToCompare gleich oder größer als das heutige Datum ist. Ich habe isSame of moment.js überprüft, aber es scheint eine Zeichenfolge und nur den Datumsteil zu verwenden. Ich möchte mein Datum jedoch nicht in einen String konvertieren oder weiter bearbeiten. Weil ich mir Sorgen mache, dass Javascript beim Konvertieren dieses Datums in eine Zeichenfolge etwas Unerwartetes bewirken könnte (z. B. das Hinzufügen des Offsets oder der dst usw.), oder weil ich mich irre.

Beispiel isSame () aus Dokumenten

moment('2010-10-20').isSame('2010-10-20');

Außerdem suche ich nach etwas wie isSame () und isAfter (), die als eine Anweisung kombiniert werden.

Ich muss nur mit moment.js vergleichen. Bitte schlagen Sie keinen einfachen Javascript-Datumsvergleich vor.

NoobGeek
quelle

Antworten:

183

In den Dokumenten ist ziemlich klar, dass Sie einen zweiten Parameter übergeben, um die Granularität anzugeben.

Wenn Sie die Granularität auf eine andere Einheit als Millisekunden beschränken möchten, übergeben Sie die Einheiten als zweiten Parameter.

moment('2010-10-20').isAfter('2010-01-01', 'year'); // false
moment('2010-10-20').isAfter('2009-12-31', 'year'); // true

Da der zweite Parameter die Genauigkeit bestimmt und nicht nur ein einzelner zu prüfender Wert, wird bei Verwendung von Tag auf Jahr, Monat und Tag geprüft.

Für Ihren Fall würden Sie 'day'als zweiten Parameter übergeben.

zzzzBov
quelle
1
Vielen Dank! Es scheint, als müsste ich nicht in einen String konvertieren. Aber haben wir eine gemeinsame Methode für isSame () und isAfter ()
NoobGeek
2
Das habe ich schon benutzt. Vielen Dank! Ich wollte nur sehen, ob es eine gemeinsame Funktion gibt, nicht, dass es schwierig ist, beide zu verwenden.
NoobGeek
@kabirbaidhya Bevor Sie umfangreiche, unaufgeforderte Änderungen vornehmen, wird es als höflich angesehen, einen Kommentar zu Fragen und Antworten zu veröffentlichen, in denen Probleme festgestellt werden. Ich glaube nicht, dass die von Ihnen vorgenommenen Änderungen notwendig waren, also habe ich sie zurückgesetzt. Wenn Sie der Meinung sind, dass die Informationen wichtig sind, sollten Sie Ihre eigene Antwort veröffentlichen.
zzzzBov
4
Nur zur Ergänzung: "Da der zweite Parameter die Genauigkeit bestimmt und nicht nur ein einzelner zu prüfender Wert, wird bei Verwendung von Tag auf Jahr, Monat und Tag geprüft."
Evaevans
6
@NoobGeek Ab Version 2.10.7 gibt es jetzt isSameOrBefore () und isSameOrAfter ().
WhiteHotLoveTiger
6

In meinem Fall habe ich folgenden Code zum Vergleichen von 2 Daten verwendet, vielleicht hilft es Ihnen ...

var date1 = "2010-10-20";
var date2 = "2010-10-20";
var time1 = moment(date1).format('YYYY-MM-DD');
var time2 = moment(date2).format('YYYY-MM-DD');
if(time2 > time1){
	console.log('date2 is Greter than date1');
}else if(time2 > time1){
	console.log('date2 is Less than date1');
}else{
	console.log('Both date are same');
}
<script src="https://momentjs.com/downloads/moment.js"></script>

Renish Gotecha
quelle
6

Sie können die startOf('day')Methode verwenden, um nur das Datum zu vergleichen

Beispiel:

var dateToCompare = moment("06/04/2015 18:30:00");
var today = moment(new Date());

dateToCompare.startOf('day').isSame(today.startOf('day'));
Anurag Aron Tigga
quelle