Сравнивая два раза с Moment JS
У меня есть проблема, которая требует от меня взять два раза в 12-часовом формате и сравнить их, у нас есть момент .js, включенный в наш проект, и мы изначально думали, что это будет так же тривиально, как это:
var beginningTime = moment('8:45am');
var endTime = moment('9:00am');
console.log(beginningTime.isBefore(endTime)); //false???
Fiddle: http://jsfiddle.net/KyleMuir/M4R4z/
Есть ли что-то, что нам не хватает? Похоже, это не должно быть трудной проблемой. Когда мы выполняем любые функции момента на наших beginningTime
или endTime
, он просто говорит NAN
Ответы
Ответ 1
Если вы всегда имеете дело с временем в формате h:mma
, вы можете указать его при разборе...
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>
Ответ 2
8:45am
и 9:00am
являются недопустимыми датами
var beginningTime = moment('8:45am');
var endTime = moment('9:00am');
console.log(beginningTime.isValid(), endTime.isValid()) // FALSE
Вы должны использовать допустимый формат: http://momentjs.com/docs/#/parsing/string/
И они предполагают, что для согласованных результатов следует использовать http://momentjs.com/docs/#/parsing/string-format/
Eg.
moment("2010-10-20 4:30", "YYYY-MM-DD HH:mm"); // parsed as 4:30 local time
Ответ 3
Вы должны просто открыть консоль и попробовать сделать это вручную: moment ( "8:45 am" ). toDate()
Он дает неверную дату, поэтому вы не получаете ожидаемых результатов. Принимая во внимание, что "2014-05-15 08:45" дает вам дату.
Ответ 4
В соответствии с документацией вы объявляете переменную момента некорректно проверять разрешенные форматы
http://momentjs.com/docs/#/parsing/string/
Вместо этого вы можете использовать
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>