【问题标题】:Validating Timestamp overlaps with PHP验证时间戳与 PHP 重叠
【发布时间】: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

这会创建一个新的日期,即一天后。但我认为这不是解决问题的正确方法。如果有人可以帮助我,我将不胜感激。这让我有点摸不着头脑!非常感谢

【问题讨论】:

    标签: php timestamp logic


    【解决方案1】:

    为什么不对两列都使用 DATETIME,避免任何杂耍。

    【讨论】:

    • 是的,我意识到设计应该更好。当时我对这种类型的东西很陌生。我将来可能会更改它,但现在我需要先对其进行排序
    【解决方案2】:

    我想你差不多明白了,但这可能是一个更好的方法:

    while(/* iterate */) {
        //...
        $selectionDate = strtotime($timeQry['date']);
        $startTime  = strtotime($timeQry['start'], $selectionDate);
        $endTime    = strtotime($timeQry['end'], $selectionDate);
        if($endTime < $startTime) {
            $endTime += 86400;
        }
        $startTimes[] = $startTime;
        $endTimes[]   = $endTime;
    }    
    

    但正如 cemkalyoncu 所说,您应该使用两个独立的时间戳,而不是三个“半”时间戳。我不知道您的应用程序,但使用两个完整的时间戳也将涵盖时差超过 24 小时的情况。这不适用于您当前的设置。

    【讨论】:

    • 为这个想法喝彩。因此,如果结束时间小于开始时间,则将其添加 24 小时。当您说我应该为每一列使用日期时间时,这是否意味着 ocode 将解释午夜之后的变化?所以我不需要增加 24 小时?
    • 如果您使用datetime,一个包含 UNIX 时间戳或任何其他(伪)唯一时间戳的整数,您不必添加 24 小时,因为每个时间戳都包含完整的日期和时间,因此不需要任何进一步的区分。
    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 2021-12-01
    • 2022-11-24
    • 2018-09-24
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多