您的示例中的问题是(在同一年)上限日期在下限之前.在这种情况下,任何小于上限(1月1日 – 3月14日)或大于下限(11月23日 – 12月31日)的日期都在两者之间.
$upperBound = new DateTime("Mar 15");
$lowerBound = new DateTime("Nov 22");
$checkDate = new DateTime("Feb 1");
if ($lowerBound < $upperBound) {
$between = $lowerBound < $checkDate && $checkDate < $upperBound;
} else {
$between = $checkDate < $upperBound || $checkDate > $lowerBound;
}
var_dump($between);
?>
显示:
布尔值为true
编辑
如果您要检查的日期是“2月29日”且当前年份不是闰年,则DateTime会将其解释为“3月1日”.
要检查日期是否介于两个日期之间,请使用:
if ($lowerBound < $upperBound) {
$between = $lowerBound <= $checkDate && $checkDate <= $upperBound;
} else {
$between = $checkDate <= $upperBound || $checkDate >= $lowerBound;
}