如何使用Moment.JS检查当前时间是否在2次之间

ᔕᖺᘎ*_*ᖺᘎᕊ 36 javascript momentjs

假设当前时间是09:34:00(hh:mm:ss),我在两个变量中还有两次:

var beforeTime = '08:34:00',
    afterTime = '10:34:00';
Run Code Online (Sandbox Code Playgroud)

如何使用Moment.JS检查当前时间是否与beforeTimeafterTime

我见过isBetween(),我试过用它:

moment().format('hh:mm:ss').isBetween('08:27:00', '10:27:00')
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为只要我将第一个(当前时间)时刻格式化为字符串,它就不再是一个时刻对象.我也尝试过使用:

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'))
Run Code Online (Sandbox Code Playgroud)

但是我得到了false,因为当我格式化当前时间时,它不再是片刻了.

我如何让它工作?

Lin*_*org 56

  • 您可以将时刻实例传递给 isBetween()
  • 省略format()调用,你想要的是在第二次尝试的第一时刻()传递解析格式,如int.

就这样:

var format = 'hh:mm:ss'

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

if (time.isBetween(beforeTime, afterTime)) {

  console.log('is between')

} else {

  console.log('is not between')

}

// prints 'is between'
Run Code Online (Sandbox Code Playgroud)

  • 它不起作用,因为你的`afterTime`在你的`beforeTime`之前:01:34在20:34之前.你当然希望第二天01:34*,但你没有定义.所以简单地做`时刻('01:34:00',格式).add(1,'day')` (3认同)

Wop*_*ppi 5

在我的例子中,我必须使用isBetweenand来覆盖isBetween 条件中使用的and时间。isSamebeforeafter

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 从文档中:“版本 2.13.0 引入了包含性。A [ 表示包含值。A ( 表示排除。如果使用包含性参数,则必须传递两个指示符。”因此,您可以使用 ` 消除 `isSame` isBetween(第一, 第二, null, '[]');` (2认同)