ᔕᖺᘎᕊ
ᔕᖺᘎᕊ

Reputation: 3011

How to use Moment.JS to check whether the current time is between 2 times

Say the current time is 09:34:00 (hh:mm:ss), and I have two other times in two variables:

var beforeTime = '08:34:00',
    afterTime = '10:34:00';

How do I use Moment.JS to check whether the current time is between beforeTime and afterTime?

I've seen isBetween(), and I've tried to use it like:

moment().format('hh:mm:ss').isBetween('08:27:00', '10:27:00')

but that doesn't work because as soon as I format the first (current time) moment into a string, it's no longer a moment object. I've also tried using:

moment('10:34:00', 'hh:mm:ss').isAfter(moment().format('hh:mm:ss')) && moment('08:34:00', 'hh:mm:ss').isBefore(moment().format('hh:mm:ss'))

but I get false, because again when I format the current time, it's no longer a moment.

How do I get this to work?

Upvotes: 79

Views: 103640

Answers (5)

Linus Borg
Linus Borg

Reputation: 23968

  • You can pass moment instances to isBetween()
  • leave out the format() calls, what you want is to pass parse formats like int the first moment() of your second attempt.

That's all:

const format = 'hh:mm:ss';

// var time = moment() gives you current time. no format required.
const time = moment('09:34:00', format);
const beforeTime = moment('08:34:00', format);
const afterTime = moment('10:34:00', format);

if (time.isBetween(beforeTime, afterTime)) {
  console.log('is between');
} else {
  console.log('is not between');
}
// prints 'is between'

Upvotes: 142

Muhammad Ibrahim
Muhammad Ibrahim

Reputation: 557

    const beforeTime = moment(t, "HH:mm");
    const afterTime = moment(t2, "HH:mm");
    
    
             
                
   const time = moment(dueTime, "HH:mm");
    
   if(time.isSameOrAfter(beforeTime) && time.isSameOrBefore(afterTime))
                {
                  
                }

Upvotes: 1

Syed Tabish Ali
Syed Tabish Ali

Reputation: 313

I have use moment function combination isSameOrAfter and isSameOrBefore instead of isBetween.

if(moment(currentTime,'HH:mm:ss').isSameOrAfter(moment(shift_dayFrom,'HH:mm:ss')) && 
moment(currentTime,'HH:mm:ss').isSameOrAfter(moment(shift_dayTo,'HH:mm:ss')))

Upvotes: 2

Woppi
Woppi

Reputation: 5431

I had to use isBetween and isSame in my case to cover the before and after time I used in the isBetween condition.

function getTimeCategory(time) {
  let timeCategory = '';
  const timeFormat = 'HH:mm:ss';

  if (
    time.isBetween(moment('00:00:00', timeFormat), moment('04:59:59', timeFormat)) ||
    time.isSame(moment('00:00:00', timeFormat)) ||
    time.isSame(moment('04:59:59', timeFormat))
  ) {
    timeCategory = 'DAWN';
  } else if (
    time.isBetween(moment('05:00:00', timeFormat), moment('11:59:59', timeFormat)) ||
    time.isSame(moment('05:00:00', timeFormat)) ||
    time.isSame(moment('11:59:59', timeFormat))
  ) {
    timeCategory = 'MORNING';
  } else if (
    time.isBetween(moment('12:00:00', timeFormat), moment('16:59:59', timeFormat)) ||
    time.isSame(moment('12:00:00', timeFormat)) ||
    time.isSame(moment('16:59:59', timeFormat))
  ) {
    timeCategory = 'NOON';
  } else if (
    time.isBetween(moment('17:00:00', timeFormat), moment('23:59:59', timeFormat)) ||
    time.isSame(moment('17:00:00', timeFormat)) ||
    time.isSame(moment('23:59:59', timeFormat))
  ) {
    timeCategory = 'NIGHT';
  }

  return timeCategory;
}

Upvotes: 5

Karel Frajták
Karel Frajták

Reputation: 4489

The example on that page is

moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'); // true

there's no call to format function as in your code so I suggest to try

moment('09:34:00').isBetween('08:34:00', '10:34:00');

Upvotes: -3

Related Questions