js - 如何比较(之前/之后)一天中的时间(忽略日期)

js - how to compare (is before / after) two datetimes in terms of time of the day (ignoring date)

提问人:MarPor 提问时间:10/7/2023 更新时间:10/7/2023 访问量:34

问:

我在项目中有 dayjs 库,但找不到一种在两个 datetime 对象之间比较一天中时间的好方法。

我得到的最接近的是:dayjs(dateTime1).isAfter(dateTime2, 'hour'),但这没有考虑分钟,导致不正确的边缘情况。

谢谢

我可能只是正则表达式时间部分,然后做一些比较,但我希望我不需要做任何转换。我不需要使用 dayjs。可以是纯 js。

JavaScript 日期时间 dayjs

评论

1赞 Pointy 10/7/2023
克隆其中一个日期,将其日/月/年设置为另一个日期的日/月/年,然后进行比较。
0赞 RobG 10/8/2023
@Pointy,如果遵守夏令时,而移动时间不存在或存在两次,那又如何呢?
0赞 Pointy 10/8/2023
@RobG好的观点,我认为 TJ 只比较小时和分钟的想法可能很好。然而,即便如此,日期语义也存在所有正常问题:日期是否相对于特定时区?比如这两个日期是两个不同城市午餐的典型时间吗?

答:

2赞 T.J. Crowder #1

如果您只想要分钟分辨率,简单的方法是将小时值乘以 60 并将分钟值相加,从而获得自午夜以来的分钟数:。然后你可以比较这些数字。hours * 60 + minutes

下面是一个使用 JavaScript 内置类型的简单示例(尽管现在我应该使用):DateTemporal

function compareTime(dt1, dt2) {
    const mins1 = dt1.getHours() * 60 + dt1.getMinutes();
    const mins2 = dt2.getHours() * 60 + dt2.getMinutes();
    return mins2 - mins1;
}

// First date's time-of-day is before second date's time-of-day
console.log(compareTime(
    new Date("2023-10-07T10:30"),
    new Date("2023-09-17T11:30"),
));

// Times-of-day are the same
console.log(compareTime(
    new Date("2023-10-07T13:30"),
    new Date("2023-09-17T13:30"),
));

// First date's time-of-day is before second date's time-of-day
console.log(compareTime(
    new Date("2023-10-07T13:30"),
    new Date("2023-09-17T11:30"),
));

对于秒分辨率,它是 .((hours * 60) + minutes) * 60 + seconds