用Moment JS比较两次

时间:2014-05-12 23:22:36

标签: javascript momentjs

我有一个问题需要我以12小时格式进行两次比较并且比较它们,我们的项目中包含了moment.js,我们最初认为它会像这样微不足道:

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

小提琴: http://jsfiddle.net/KyleMuir/M4R4z/

我们缺少什么?感觉这应该不是一个难以解决的难题。当我们在beginningTimeendTime上执行任何时刻功能时,它只是说NAN

4 个答案:

答案 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>

它将使用今天作为日期,因此如果您跨越不同的日期,它将无效。

JSFiddle

答案 1 :(得分:4)

8:45am9: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/

而不是它,你可以使用

&#13;
&#13;
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;
&#13;
&#13;

答案 3 :(得分:1)

您应该只需打开控制台并尝试手动执行此操作:时刻(&#34; 8:45 am&#34;)。toDate()

它会为您提供无效日期,这就是您无法获得预期结果的原因。然而&#34; 2014-05-15 08:45&#34;给你一个约会。