Moment.js时间比较

时间:2018-12-16 11:16:06

标签: vue.js momentjs

我使用Vue.jsMoment.js库来处理时间,我需要比较小时和分钟,而不是日期。例如,我需要比较'12:00''13:45',并使用.isBefore函数(docs)。

我尝试了一堆函数,它们使用日期,但不能精确地计时(我尝试了很多示例,所以这是最后一个)

我使用矩作为原型,所以$没问题

let time = this.$moment('10:00-11:30'.split('-')[0], 'HH:mm').format('HH:mm');
let time2 = this.$moment(new Date(), 'HH:mm').format('HH:mm');
console.log({time, time2});
console.log(this.$moment(time.format('hh:mm').isBefore(this.$moment('12:00'), 'hh:mm'))
console.log(this.$moment(time, 'hh:mm').format('hh:mm').isBefore(this.$moment(time2).format('hh:mm'), 'hh:mm'))
console.log(this.$moment(this.$moment('10:00', 'HH:mm').format('HH:mm')).isBefore(this.$moment('12:00'),'HH:mm'));
console.log(this.$moment(this.$moment('10:00', 'HH:mm').format('HH:mm')).isBefore(this.$moment(time2).format('HH:mm'),'HH:mm'));

其中一些返回false,但应返回true,其中一些返回错误.isBefore is not a function。 我还发现了thisthisthis,但它仅适用于确切的日期,而不仅适用于小时和分钟

有人可以帮我弄清楚我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

您的代码示例中有几个问题,首先format()返回一个字符串,因此您不能在time.format('hh:mm')之类的东西上使用isBefore,这就是为什么 isBefore is not a function

此外,即使仅通过提供时间值来创建时刻对象,时刻对象也始终代表给定的时刻(日期+时间)。如文档的Defaults部分所述:

  

您可以创建一个矩对象,仅指定某些单位,其余的将默认为当前的日期,月份或年份,或小时,分钟,秒和毫秒的默认值为0。

我建议使用format()(不带参数)来检查时刻对象的值,以更好地理解为什么会得到意外的结果。

此处是代码示例的未更新版本(无vue.js),以显示如何使用isBefore

let time = moment('10:00-11:30'.split('-')[0], 'HH:mm');
let time2 = moment();
console.log( time.format(), time2.format() );
console.log( time.isBefore(moment('12:00', 'hh:mm')) );
console.log( time.isBefore(time2) );
console.log( moment('10:00', 'HH:mm').isBefore(moment('12:00','HH:mm')) );
console.log( moment('10:00', 'HH:mm').isBefore(time2) );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>