与 Moment JS 比较两次

IT技术 javascript momentjs
2021-03-14 15:14:39

我有一个问题,需要我以 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

4个回答

如果你总是处理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

不知道 Moment.js 有一个“isBefore”函数!为我节省了很多意大利面代码,谢谢!
2021-04-29 15:14:39

根据文档,您声明的时刻变量错误地检查了允许的格式

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>

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/

例如。

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

您应该打开控制台并尝试手动执行此操作:moment("8:45am").toDate()

它为您提供无效日期,这就是您没有获得预期结果的原因。而“2014-05-15 08:45”给你一个日期。