如何解决moment.js |在与日期混淆之前检查
我目前正在处理一个项目,该项目需要查找HH:mm
中的时间是否早于另一个时间。
我正在使用时刻时区并将全局时区设置为UTC。
我要比较的日期是:2020-09-02T00:00:00.0000+00:00
我正在检查执行以下操作的地方:
const example = '2020-09-02T00:00:00.0000+00:00'
const time = moment(example)
const timeStart = moment('08:00','HH:mm')
console.log(time.isBefore(timeStart))
控制台日志返回结果false
。
我认为原因是timeStart
的计算结果是当前日期,因此由于日期在将来而失败。我需要停止比较日期的时间,有没有办法做到这一点?
我要实现的目标是以下
'00:00:00'.isBefore('08:00')
const time = moment('2020-09-02T00:00:00.0000+00:00')
const timeStart = moment('08:00','HH:mm')
console.log(time)
console.log(timeStart)
console.log(time.isBefore(timeStart))
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
解决方法
您可以使用moment.js做到这一点,方法是将时间戳转换为moment对象,然后克隆该对象并将其时间设置为所需的比较时间。这样一来,您始终可以比较同一日期的时间。
要将所有内容保留为UTC,请使用 utc 。例如
let ts = '2020-09-02T00:00:00.0000+00:00';
let d = moment.utc(ts); // Invoke UTC mode
let time = '08:30';
let [h,m] = time.split(':');
let e = d.clone().hours(h).minutes(m).seconds(0).milliseconds(0);
console.log(d.format() + ' is before\n' +
e.format() + '? ' + d.isBefore(e));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
您可以轻松地将时间与普通JS进行比较:
/**
* Compare a time to just the time part of a
* Date,all using UTC.
*
* @param {Date} date - date to compare
* @param {string} time - time in HH:mm format
* @returns {boolean} true if time in date is before time passed to function
*/
function isTimeBefore(date = new Date(),time) {
// Get time value for start of UTC day
// Copy date so don't affect original
let dayStart = new Date(+date).setUTCHours(0,0);
// Convert the time to milliseconds since midnight
let [h,m] = time.split(':');
let ms = h*3.6e6 + m*6e4;
// Compare to the date's milliseconds elapsed since midnight
return ms > (date - dayStart);
}
// UTC timestamp
let ts = '2020-09-02T00:00:00.0000+00:00';
// Convert to Date
let d = new Date(ts);
// local time
let time = '08:30';
console.log('UTC: ' + d.toISOString() + '\nis before ' + time + ' UTC? : ' + isTimeBefore(d,time));
通常应避免使用内置的解析器,但是上面的方法使用它来将时间戳转换为日期,因为它是使用中的浏览器能够可靠解析的唯一受支持的格式。
,const time = moment('2020-09-02T00:00:00.0000+00:00')
const timeStart = moment('09:00','HH:mm')
time.isBefore(timeStart) //returns true
对我还真。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。