如何用JS或Day.js比较两个Datetime的当日时间(忽略日期)
解决方案
用 Day.js 实现忽略日期的时间比较
你可以把两个日期的年、月、日统一设置为同一个固定值,这样后续的时间比较就只会关注时分秒部分,完全忽略原日期的差异:
// 比较两个日期的当日时间,返回结果:1(time1更晚)、-1(time1更早)、0(时间相同) const compareTimeOnly = (date1, date2) => { // 用固定日期覆盖原日期的年月日,只保留时分秒信息 const time1 = dayjs(date1).set('year', 2000).set('month', 0).set('date', 1); const time2 = dayjs(date2).set('year', 2000).set('month', 0).set('date', 1); if (time1.isAfter(time2)) return 1; if (time1.isBefore(time2)) return -1; return 0; }; // 示例调用 const dateA = dayjs('2024-05-20 14:35:00'); const dateB = dayjs('2023-10-01 14:40:00'); console.log(compareTimeOnly(dateA, dateB)); // 返回 -1,因为14:35比14:40早
这种方法基于Day.js原生API实现,无需额外转换,能精确到毫秒级的时间比较,解决了原方法只对比小时的边缘问题。
纯 JavaScript 实现
如果不想依赖Day.js,直接通过原生Date对象提取当日时间的总毫秒数来比较即可:
// 计算一个日期的当日时间总毫秒数(从00:00:00开始累计) const getTimeTotalMs = (date) => { return date.getHours() * 3600000 + // 小时转毫秒 date.getMinutes() * 60000 + // 分钟转毫秒 date.getSeconds() * 1000 + // 秒转毫秒 date.getMilliseconds(); // 毫秒部分 }; // 判断date1的当日时间是否晚于date2 const isTimeAfter = (date1, date2) => getTimeTotalMs(date1) > getTimeTotalMs(date2); // 判断date1的当日时间是否早于date2 const isTimeBefore = (date1, date2) => getTimeTotalMs(date1) < getTimeTotalMs(date2); // 判断两个日期的当日时间是否相等 const isTimeEqual = (date1, date2) => getTimeTotalMs(date1) === getTimeTotalMs(date2); // 示例调用 const dateX = new Date('2024-05-20 09:15:30'); const dateY = new Date('2023-08-15 09:15:29'); console.log(isTimeAfter(dateX, dateY)); // 返回 true,因为09:15:30比09:15:29晚
这种方法完全原生,逻辑简单直接,能覆盖所有时间精度的边缘案例。
内容的提问来源于stack exchange,提问作者MarPor
相关产品推荐
相关产品推荐

