我使用moment.js来格式化我的日期时间,这里我有两个日期值,当一个日期大于另一个时,我想实现一个特定的函数。我读了他们的大部分文档,但没有找到实现这个功能的函数。我知道它会在那里。
这是我的代码:
var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
var d = moment(date_time).tz('UTC'); // first date
var now = new Date(),
dnow = moment(now).tz('UTC'),
snow = dnow.minute() % 15,
diffnow = 15 - snow,
tonow = moment(dnow).add('minute', diffnow),
ahead30now = moment(tonow).add('minute', 30);
if (d > ahead30now) {
// allow input time
console.log('UTC TIME DB', d.format());
} else {
}
编辑
var date_time = req.body.date + 'T' + req.body.time + req.body.timezone; // 2014-03-24T01:15:000
var utc_input_time = moment(date_time).utc(); // 2014-03-24T01:15:000
console.log('utc converted date_time', moment(date_time).utc().format("YYYY-MM-DDTHH:mm:SSS"));
var isafter = moment(utc_input_time).isAfter(moment('2014-03-24T01:14:000')); // true
if(isafter === true){
console.log('is after true');
} else {
console.log('is after is false');
}
在这里,我比较了两个日期,即2014-03-24T01:15:000 > 2014-03-24T01:14:000,期望第一个比第二个大,但它总是走向else条件。我不知道为什么?
重要的是,你的datetime在正确的ISO格式使用任何momentjs查询:isBefore, isAfter, isSameOrBefore, isSameOrAfter, isBetween
所以你的日期时间应该是:
2014-03-24T01:14:00或2014-03-24T01:14:00. 000z
否则,您可能会收到以下弃用警告,条件将计算为false:
弃用警告:所提供的值不在可识别的RFC2822或
ISO格式。moment构造返回到js Date(),这不是
适用于所有浏览器和版本。非RFC2822/ISO日期
格式是不鼓励的,并将在即将到来的主要删除
释放。详情请参阅
http://momentjs.com/guides/#/warnings/js-date/获取更多信息。
// https://momentjs.com/docs/#/query/
const dateIsAfter = moment('2014-03-24T01:15:00.000Z').isAfter(moment('2014-03-24T01:14:00.000Z'));
const dateIsSame = moment('2014-03-24T01:15:00.000Z').isSame(moment('2014-03-24T01:14:00.000Z'));
const dateIsBefore = moment('2014-03-24T01:15:00.000Z').isBefore(moment('2014-03-24T01:14:00.000Z'));
console.log(`Date is After: ${dateIsAfter}`);
console.log(`Date is Same: ${dateIsSame}`);
console.log(`Date is Before: ${dateIsBefore}`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.0/moment.min.js"
></script>
重要的是,你的datetime在正确的ISO格式使用任何momentjs查询:isBefore, isAfter, isSameOrBefore, isSameOrAfter, isBetween
所以你的日期时间应该是:
2014-03-24T01:14:00或2014-03-24T01:14:00. 000z
否则,您可能会收到以下弃用警告,条件将计算为false:
弃用警告:所提供的值不在可识别的RFC2822或
ISO格式。moment构造返回到js Date(),这不是
适用于所有浏览器和版本。非RFC2822/ISO日期
格式是不鼓励的,并将在即将到来的主要删除
释放。详情请参阅
http://momentjs.com/guides/#/warnings/js-date/获取更多信息。
// https://momentjs.com/docs/#/query/
const dateIsAfter = moment('2014-03-24T01:15:00.000Z').isAfter(moment('2014-03-24T01:14:00.000Z'));
const dateIsSame = moment('2014-03-24T01:15:00.000Z').isSame(moment('2014-03-24T01:14:00.000Z'));
const dateIsBefore = moment('2014-03-24T01:15:00.000Z').isBefore(moment('2014-03-24T01:14:00.000Z'));
console.log(`Date is After: ${dateIsAfter}`);
console.log(`Date is Same: ${dateIsSame}`);
console.log(`Date is Before: ${dateIsBefore}`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.0/moment.min.js"
></script>