gpt4 book ai didi

javascript - 检查日期是否在日期范围之间

转载 作者:行者123 更新时间:2023-12-04 17:09:40 25 4
gpt4 key购买 nike

我正在尝试通过编写自己的事件日历来学习 javascript,但遇到了挑战。

我这样做是为了检查日期是否介于事件的开始日期和结束日期之间:

if(thisCellDate > startEventDate && thisCellDate < endEventDate) {}

thisCellDate 是我正在循环的天数网格中的当前单元格(当月的天数)。问题是当开始日期与网格中的单元格在同一天时,它不起作用,因为单元格的日期在技术上更早。

他是我所说的一个例子:
Start Date: Fri May 02 2014 15:01:16 GMT-0400 (Eastern Daylight Time)
Cell's Date: Sat May 02 2014 00:00:00 GMT-0400 (Eastern Daylight Time)
End Date: Thu May 29 2014 16:01:24 GMT-0400 (Eastern Daylight Time)

我正在使用日期字符串生成单元格的日期: new Date('8,8,2014')
现在我想我可以通过使单元格的日期尽可能接近下一个日期来解决这个问题,如下所示: new Date(2013, 8, 8, 23, 59, 59, 999)
这样,事件日期应始终早于单元格日期。这样做有问题还是有更清晰的方法?

最佳答案

当人们指定仅日期范围时,它们往往是完全封闭的范围。距离2014-01-01还有多少天至2014-01-02 ?二。

但是,当时间被添加到混合中时,无论是在仅时间范围内,还是在日期+时间范围内,那么这些范围通常是半开范围。距离 1:00 多少小时至2:00 ?一。

现在的问题是 JavaScript 的 Date对象实际上是一个日期+时间对象。 (名称错误,恕我直言)。当您不指定时间时,它会将时间设置为一天中的第一刻——通常(但不总是)午夜。

所以你可能会认为你会这样做:

var a = new Date(2014, 0, 1);
var b = new Date(2014, 0, 2);
var inRange = dt >= a && dt <= b;

但这并没有考虑到 Date secret 添加的时间。目的。 1 月 2 日中午的值不会包含在此范围内。

所以为了补偿,你必须增加一天,然后使用半开区间:
var a = new Date(2014, 0, 1);
var b = new Date(2014, 0, 2);

var c = new Date(b.getTime()); // clone the date to not muck the original value
c.setDate(c.getDate()+1); // add a day
var inRange = dt >= a && dt < c; // use a half-open interval

使用 23:59:59.999 之类的缩短值可能会让您顺利通过,但总的来说这不是一个好方法。从间隔的结尾减去开始应该会给你它的确切持续时间 - 不是少一毫秒。

关于javascript - 检查日期是否在日期范围之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24246092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com