问题描述
我正在编写PHP条件以防止日期时间重叠。我测试了其中的每一个,除了这一个以外,它们似乎都可以正常工作:
_____________________________________
| ______________________ |
| | | |
formStart. dbStart. dbEnd. formEnd
formStart和fromEnd是我在表单中输入的日期时间,而dbStart和dbEnd是数据库中存在的日期时间。
我尝试过这种情况:
if (($formStart < $dbStart) && ($dbEnd < $formEnd)) {
echo 'Overlap!';
} else {
echo 'No overalp';
我还认为添加等号(==)会很明智,因为当它们都在同一日期时,它们是重叠的吗?
谁能说出这种情况的原因,因为我不工作?
---------更新------------
由于此处提供的建议不起作用,因此我用建议的大小写更新了代码并发布了整个方法。
if (($formStart < $dbStart) && ($dbStart < $formEnd)) {
return false;
// formEnd is between Start Date and End Date!
} elseif (($formStart < $dbEnd) && ($dbEnd <= $formEnd)) {
return false;
// formStart is between Start Date and End Date!
} elseif (($dbStart <= $formStart) && ($dbEnd > $formEnd)) {
return false;
// formStart and formEnd are between Start Date and End Date!
} elseif (($formStart < $dbEnd && ($formEnd > $dbStart)) {
return false; // example I added
else {
return true;
}
解决方法
您的逻辑中有一个小错误,应该是
if (($formStart < $dbEnd) && ($formEnd > $dbStart)) {
echo 'Overlap!';
} else {
echo 'No overalp';
这将覆盖部分和全部重叠。