如何检查具有不同日期的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))
但对于这种情况,当我通过"分钟"参数,它会检查分钟,小时,日,月和年......这不是我要检查的内容。
答案 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部分,了解如何获取和设置时刻对象的单位。