web-dev-qa-db-fra.com

Comparer deux fois avec Moment JS

J'ai un problème qui nécessite que je prenne deux fois au format 12 heures et que je les compare, nous avons moment.js inclus dans notre projet et nous pensions au départ que ce serait aussi trivial que celui-ci:

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

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

Y a-t-il quelque chose qui nous manque? Il semble que cela ne devrait pas être un problème difficile à résoudre. Lorsque nous effectuons n'importe quel moment des fonctions sur notre beginningTime ou endTime, il est simplement indiqué que NAN

35
Kyle Muir

Si vous traitez toujours avec le temps en h:mma _ format, vous pouvez le spécifier lors de l'analyse ...

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>

Il utilisera aujourd'hui comme date, de sorte qu'il ne fonctionnera pas si vous étendez plusieurs jours.

JSFiddle

68
Anthony Chu

8:45am et 9:00am sont des dates invalides

var beginningTime = moment('8:45am');
var endTime = moment('9:00am');
console.log(beginningTime.isValid(), endTime.isValid()) // FALSE

Vous devez utiliser un format valide: http://momentjs.com/docs/#/parsing/string/

Et ils suggèrent que, pour des résultats cohérents, il convient d'utiliser http://momentjs.com/docs/#/parsing/string-format/

Par exemple.

moment("2010-10-20 4:30", "YYYY-MM-DD HH:mm"); // parsed as 4:30 local time
4
Amy

Selon la documentation, vous déclarez une variable de moment de manière incorrecte, vérifiez les formats autorisés

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

Au lieu de cela, vous pouvez utiliser

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>
2
Mudaser Ali

Vous devriez simplement ouvrir la console et essayer de le faire manuellement: moment ("08h45"). ToDate ()

Cela vous donne une date invalide, ce qui explique pourquoi vous n'obtenez pas les résultats escomptés. Alors que "2014-05-15 08:45" vous donne une date.

1
Damon Smith