【发布时间】:2009-09-18 15:54:28
【问题描述】:
我的数据库包含日期、开始和结束变量。在我的代码中,我在用户选择它们时抓住开始和它们,并将它们转换为像这样的时间戳(都在 foreach 循环内)..
$selectionDate = strtotime($timeQry['date']);
$startTimes[] = strtotime($timeQry['start'],$selectionDate);
$endTimes[] = strtotime($timeQry['end'],$selectionDate);
这为我提供了正确的开始和结束时间作为时间戳。然后我有一个逻辑语句来验证它,看看是否有任何选定的时间重叠......
if(($startTimes[1] < $startTimes[0]) && ($endTimes[1] > $startTimes[0]) ||
($startTimes[1] > $startTimes[0]) && ($startTimes[1] < $endTimes[0]) )
{
echo "overlap"
}
这在大多数情况下都可以正常工作,但是如果在午夜 12 点之后(例如凌晨 02:00)结束时间之一,则该时间戳将小于开始时间,因为代码使用预订开始的日期上。这会导致逻辑失败并错过重叠。
我想过做:
if( ($endTimes[$k] >= $selectionDate) )
{
$endTimes[] = strtotime($timeQry['end'],$newDate+ 1253574000);
}
else
{
$endTimes[] = strtotime($timeQry['end'],$selectionDate);
}
//...run same logic query
这会创建一个新的日期,即一天后。但我认为这不是解决问题的正确方法。如果有人可以帮助我,我将不胜感激。这让我有点摸不着头脑!非常感谢
【问题讨论】: