momentjs中的isBefore函数不起作用

问题描述 投票:0回答:2

我尝试检查h:mm中的某个时间是否早于另一个具有相同格式的时间。但是,控制台向我显示了一个错误,提示isBefore不是函数,或者始终显示false。我在Ionic 3 / 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 function not working as expected

在momentjs的官方网站上,我没有弄清楚如何进行两次比较。您能给我支持吗?

ionic3 momentjs angular2-moment
2个回答
0
投票

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>

0
投票

因此,原因isBefore无法按预期方式进行格式化。如果将时间另存为矩对象并稍后格式化,则isBefore可以正常工作。这是一个例子:

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'), start_time.format('LT')];
© www.soinside.com 2019 - 2024. All rights reserved.