Come confrontare solo la data in moment.js


107

Sono nuovo su moment.js. Ho un oggetto data a cui è associato del tempo. Voglio solo controllare se quella data è maggiore o uguale alla data odierna, escludendo l'ora durante il confronto.

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

Voglio solo controllare se dateToCompare è uguale o maggiore della data odierna. Ho controllato isSame of moment.js, ma sembra prendere la stringa e solo la parte della data. Ma non voglio convertire la mia data in stringa o manipolarla ulteriormente. Perché sono preoccupato che javascript possa fare qualcosa di inaspettato durante la conversione di quella data in una stringa (come l'aggiunta di offset o dst, ecc.), O potrebbe essere sbagliato.

Esempio isSame () da documenti

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

Inoltre sto cercando qualcosa come isSame () e isAfter () combinati come un'unica istruzione.

Devo confrontare usando solo moment.js. Si prega di non suggerire un semplice confronto di date javascript.

Risposte:


183

I documenti sono abbastanza chiari che si passa un secondo parametro per specificare la granularità.

Se desideri limitare la granularità a un'unità diversa dai millisecondi, passa le unità come secondo parametro.

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

Poiché il secondo parametro determina la precisione, e non solo un singolo valore da controllare, utilizzando day verificherà anno, mese e giorno.

Nel tuo caso passeresti 'day'come secondo parametro.


1
Grazie! sembra che non sia necessario convertire in stringa. Ma abbiamo qualche metodo comune per isSame () e isAfter ()
NoobGeek

2
L'ho già usato. Grazie! volevo solo vedere se esiste una funzione comune, non che sia difficile utilizzarle entrambe.
NoobGeek

@kabirbaidhya, prima di apportare modifiche considerevoli non richieste, è considerato educato pubblicare un commento su domande e risposte annotando problemi. Non credo che le modifiche che hai apportato fossero necessarie, quindi le ho ripristinate. Se ritieni che le informazioni siano importanti, considera la possibilità di pubblicare la tua risposta.
zzzzBov

4
Giusto per completare: "Poiché il secondo parametro determina la precisione, e non solo un singolo valore da controllare, utilizzando il giorno si verificheranno anno, mese e giorno".
eveevans

6
@NoobGeek Ora sono disponibili isSameOrBefore () e isSameOrAfter () dalla versione 2.10.7 in poi.
WhiteHotLoveTiger


6

Nel mio caso ho seguito il codice per confrontare 2 date, potrebbe aiutarti ...

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>


6

È possibile utilizzare il startOf('day')metodo per confrontare solo la data

Esempio :

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

dateToCompare.startOf('day').isSame(today.startOf('day'));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.