Сравнение времени Moment.js - PullRequest
0 голосов
/ 16 декабря 2018

Я использую библиотеку Vue.js и Moment.js для работы со временем, и мне нужно сравнить часы и минуты, а не дату.Например, мне нужно сравнить '12:00' и '13:45', и я использую функцию .isBefore ( документы ).

Я пробовал несколько функций, и они работают с датами, ноне время точно (я пробовал много примеров, так что это последний из них)

Я использую момент в качестве прототипа, поэтому $ в порядке

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.Я также нахожу это , это и это , но оно работает только с точными датами, а не только часами и минутами

Может кто-нибудь помочьмне выяснить, что я сделал не так?

1 Ответ

0 голосов
/ 17 декабря 2018

В вашем примере кода есть несколько проблем, во-первых, format() возвращает строку, поэтому вы не можете использовать isBefore для чего-то вроде time.format('hh:mm')Вот почему вы получаете isBefore is not a function

Более того, моментный объект всегда представляет определенный момент времени (дата + время), даже если вы создаете его, предоставляя только значения времени.Так как в разделе документов По умолчанию указано:

Вы можете создать моментный объект, определяющий только некоторые единицы, а остальные будут по умолчанию установлены на текущий день, месяц илигод или 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>
...