2014-05-12 13 views
23

Ho un problema che mi richiede di prendere due volte nel formato 12 ore e confrontarli, abbiamo moment.js incluso nel nostro progetto e inizialmente pensavamo che sarebbe stato così banale come questo:Confronto due volte con Moment JS

var beginningTime = moment('8:45am'); 
var endTime = moment('9:00am'); 
console.log(beginningTime.isBefore(endTime)); //false??? 

Fiddle:http://jsfiddle.net/KyleMuir/M4R4z/

c'è qualcosa che manca? Sembra che questo non dovrebbe essere un problema difficile da risolvere. Quando eseguiamo alcuna funzione di momento in poi il nostro beginningTime o endTime si dice semplicemente NAN

risposta

40

Se siete sempre a che fare con l'ora in formato h:mma, è possibile specificare che durante l'analisi ...

var beginningTime = moment('8:45am', 'h:mma'); 
 
var endTime = moment('9:00am', 'h:mma'); 
 
console.log(beginningTime.isBefore(endTime)); // true 
 
console.log(beginningTime.toDate()); // Mon May 12 2014 08:45:00 
 
console.log(endTime.toDate()); // Mon May 12 2014 09:00:00
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>

Userà oggi come la data, in modo non funzionerà se stai attraversando diversi giorni.

JSFiddle

1

si deve solo aprire la console e provare a fare questo manualmente:. Momento ("8:45") TODATE()

ti dà Data non valida, motivo per cui non stai ottenendo risultati attesi. Considerando che "2014-05-15 08:45" ti dà una data.

1

Come da documentazione si dichiara variabili momento formiati un check erroneamente consentite

http://momentjs.com/docs/#/parsing/string/

Invece di esso è possibile utilizzare

var beginningTime = moment({ 
 
    h: 8, 
 
    s: 45 
 
}); 
 
var endTime = moment({ 
 
    h: 9, 
 
    s: 0 
 
}); 
 
console.log(beginningTime.isBefore(endTime)); //true
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>