我有一个问题需要我以12小时格式进行两次比较并且比较它们,我们的项目中包含了moment.js,我们最初认为它会像这样微不足道:
var beginningTime = moment('8:45am');
var endTime = moment('9:00am');
console.log(beginningTime.isBefore(endTime)); //false???
小提琴: http://jsfiddle.net/KyleMuir/M4R4z/
我们缺少什么?感觉这应该不是一个难以解决的难题。当我们在beginningTime
或endTime
上执行任何时刻功能时,它只是说NAN
答案 0 :(得分:62)
如果您始终以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>
它将使用今天作为日期,因此如果您跨越不同的日期,它将无效。
答案 1 :(得分:4)
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
答案 2 :(得分:2)
根据文档,您声明时刻变量错误地检查允许的格式
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
&#13;
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
&#13;
答案 3 :(得分:1)
您应该只需打开控制台并尝试手动执行此操作:时刻(&#34; 8:45 am&#34;)。toDate()
它会为您提供无效日期,这就是您无法获得预期结果的原因。然而&#34; 2014-05-15 08:45&#34;给你一个约会。