我正在尝试进行 IF 检查以查看 X 日期范围是否在 Y 日期范围之间。但它没有在正确的时间返回正确的真/假:
var startdate = new Date('06/06/2013');
var enddate = new Date('06/25/2013');
var startD = new Date('06/08/2013');
var endD = new Date('06/18/2013');
if(startD >= startdate || endD <= enddate) {
return true;
} else {
return false;
}
这行得通,但是如果我将 startdate
更改为 06/09/2013
并将 enddate
更改为 06/17/2013
它在应该工作时不再工作。
如果 startdate
是 06/07/2013
并且 enddate
是 06/15/2013
,但没有。有什么想法吗?
最佳答案
如果您要检测完全包含,那是相当容易的。 (此外,您不需要显式的return true/false
,因为无论如何条件都是 bool 值。只需返回它即可)
// Illustration:
//
// startdate enddate
// v v
// #----------------------------------------#
//
// #----------------------#
// ^ ^
// startD endD
return startD >= startdate && endD <= enddate;
重叠测试稍微复杂一些。如果两个日期范围重叠,则无论顺序如何,以下内容都将返回 true
。
// Need to account for the following special scenarios
//
// startdate enddate
// v v
// #----------------#
//
// #----------------------#
// ^ ^
// startD endD
//
// or
//
// startdate enddate
// v v
// #----------------#
//
// #------------------#
// ^ ^
// startD endD
return (startD >= startdate && startD <= enddate) ||
(startdate >= startD && startdate <= endD);
@Bergi 的回答可能更优雅,因为它只检查两个日期范围的开始/结束对。
关于日期范围之间的JavaScript日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17304426/