检查日期是否在一系列日期之间

red*_*888 5 javascript datetime

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

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

if(thisCellDate > startEventDate && thisCellDate < endEventDate) {}
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

我生成Cell的日期,日期字符串如下: new Date('8,8,2014')

现在我想我可以通过让单元格的日期尽可能接近下一个日期来解决这个问题,如下所示: new Date(2013, 8, 8, 23, 59, 59, 999)

这样,事件日期应始终早于单元格日期.这样做有问题还是有更明确的方法?

Mat*_*int 10

当人类指定仅限日期的范围时,它们往往是完全封闭的范围.多少天2014-01-012014-01-02?二.

但是当混合时间添加到时间范围或日期+时间范围时,这些范围通常是半开范围.从几个小时1:002:00?一.

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

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

var a = new Date(2014, 0, 1);
var b = new Date(2014, 0, 2);
var inRange = dt >= a && dt <= b;
Run Code Online (Sandbox Code Playgroud)

但这并不能说明Date对象秘密添加的时间.1月中旬的值不包括在此范围内.

所以要补偿,你必须添加一天,然后使用半开间隔:

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
Run Code Online (Sandbox Code Playgroud)

使用缩短的值如23:59:59.999可能会让你过去,但这不是一般的好方法.从间隔结束中减去开始应该给出它的确切持续时间 - 不会少一毫秒.