检查时间是否与Moment.js相同

时间:2017-04-13 09:23:38

标签: javascript time momentjs

如何检查具有不同日期的Moment对象的时间是否相同?

例如我有像

这样的对象
const endDate = moment().add(30, 'days').endOf('day');

我想检查某个时刻对象是否为endOf天。

private isEndOfDay(dateTime: string) {
    const m = moment().endOf('day');

    return m.isSame(dateTime, 'minute');
}

const receivedDateFormat: string = 'YYYY-MM-DD hh:mm:ss';

this.isEndOfDay(this.endDate.format(this.receivedDateFormat))

但对于这种情况,当我通过"分钟"参数,它会检查分钟,小时,日,月和年......这不是我要检查的内容。

2 个答案:

答案 0 :(得分:3)

解释该行为的documentation部分

  

当包含第二个参数时,它将匹配所有等于或大于的单位。通过月份将检查月份和年份。通过白天将检查日,月和年。

所以,如果您只想比较分钟数,则需要执行类似

的操作
endDate.minute() === startDate.minute()

要比较时间,请格式化()日期

endDate.format('HH:mm:ss') === startDate.format('HH:mm:ss')

答案 1 :(得分:1)

要仅比较时间部分,您可以将给定日期(年,月和日)设置为输入。

请注意,将'minute'传递给isSame会忽略秒数。

这是一个实时样本:

function isEndOfDay(dateTime) {
  let m = moment().endOf('day');
  let m2 = moment(dateTime);
  m2.set({
    y: m.year(),
    M: m.month(),
    D: m.date()
  });
  return m.isSame(m2, 'minute');
}

var endDate = moment().add(30, 'days').endOf('day');
const receivedDateFormat = 'YYYY-MM-DD hh:mm:ss';

var ret = isEndOfDay(endDate.format(this.receivedDateFormat))
console.log(ret);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

另一种方法是只检查对您而言重要的单位:

function isEndOfDay(dateTime) {
  let m = moment().endOf('day');
  let m2 = moment(dateTime);
  if( m.hours() === m2.hours() &&
      m.minutes() === m2.minutes() &&
      m.seconds() === m2.seconds() ){
    return true;
  }
  return false;
}

var endDate = moment().add(30, 'days').endOf('day');
const receivedDateFormat = 'YYYY-MM-DD hh:mm:ss';

var ret = isEndOfDay(endDate.format(this.receivedDateFormat))
console.log(ret);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

请参阅文档的Get + Set部分,了解如何获取和设置时刻对象的单位。