我使用Vue.js
和Moment.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
。
我还发现了this,this和this,但它仅适用于确切的日期,而不仅适用于小时和分钟
有人可以帮我弄清楚我做错了什么吗?
答案 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>