我试图检查h:mm中的某个时间是否在另一个相同格式的时间之前。然而,控制台显示一个错误,说isBefore不是函数,或者它总是打印false。我在Ionic3/Angular中使用此代码。
如果我按照以下方式进行编码,控制台将打印false。我尝试了不同的论点,而不是一小时。
var start_time = moment('20:00', 'h:mm').format('LT');
var last_time = moment('21:59', 'h:mm').format('LT');
var check_last = moment(start_time).isBefore(last_time, 'hour');
console.log(check_last);
如果我按如下方式编码。如下链接所示。控制台给我的错误是
var start_time = moment('20:00', 'h:mm').format('LT');
var last_time = moment('21:59', 'h:mm').format('LT');
var check_last = start_time.isBefore(last_time, 'hour');
console.log(check_last);
Moment.js isBefore函数未按预期工作
在momentjs的官方网站上,我不知道如何比较两次。你能给我支持吗?
Moment的format()
返回一个字符串,因此您不能在time.format('hh:mm'(之类的东西上使用isBefore
,这就是您得到isBefore不是函数的原因。
同样根据文档本身,moment((.isBefore((具有未定义的行为,不应使用!如果代码运行得很快,最初创建的时刻将与isBefore中创建的时刻相同,以执行检查,因此结果将为false
尝试不格式化以获得所需的输出
var start_time = moment("20:00", "h:mm");
var last_time = moment("21:59", "h:mm");
var check_last = moment(start_time).isBefore(last_time, "hour");
console.log(check_last);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
所以Before((没有按预期工作的原因是格式。格式化时间会返回一个字符串,在比较时可能会导致错误。
如果您将时间保存为矩对象,则矩可以准确地比较它们。您可以在比较后进行格式化。这里有一个例子:
var start_time = moment('20:00', 'h:mm');
var last_time = moment('21:59', 'h:mm');
var check_last = moment(start_time).isBefore(last_time, 'hour');
console.log(check_last);
// format at end
// return [
// start_time.format('LT'),
// last_time.format('LT'),
// ];
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.25.3/moment.min.js"></script>