PHP检查事件是否已经开始

时间:2017-03-19 06:28:34

标签: php mysql

我使用以下mysql脚本显示活动/即将到来的灯具列表。

    Select * FROM schedule 
            WHERE schedule.gameDate > CURDATE() OR
                        ( schedule.gameDate = CURDATE() and schedule.gameTime > CURTIME() )
            GROUP BY schedule.tournament
            ORDER By schedule.gameDate

上述脚本完美无缺。

但是,作为额外的检查,以防止用户访问已经过期的灯具我正在执行以下操作。

$curTime = date('H:i:s');
$curDate =  date('Y-m-d');    

$sql = "SELECT * FROM schedule
         WHERE tournament = :tour AND weekNum = :round";
$stmnt = $db->prepare($sql);
$stmnt->bindValue(':tour',$tournament);
$stmnt->bindValue(':round', $round);
$stmnt->execute();
$results = $stmnt->fetchAll();
foreach($results as $result){

    echo $eventDate = $result['gameDate'];
    echo $startTime = $result['gameTime'];

    if($curDate > $eventDate){
        echo '<h1> CURRENT ROUND ALLREADY STARTED</h1>';
        die();
}//if
else if($eventDate==$curDate && $curTime>$startTime){
        echo '<h1> CURRENT ROUND ALLREADY STARTED</h1>';
        die();
    }//else if  
}//foreach

我的问题。

循环永远不会传递第一个IF结果,而这个结果总是会导致真......

数据库表

enter image description here

当我回显变量时,我得到以下内容:

$curTime = 09:30:00
$curDate = 2017-19-03

$eventDate = 2017-03-21
$startTime = 13:00:00

我意识到这不是最漂亮的代码,但根据我的小经验和逻辑,它应该通过两个如果... ...

任何建议表示赞赏

3 个答案:

答案 0 :(得分:2)

使用strtotime()比较php

中的两个日期

if($curDate > $eventDate) 替换为 if(strtotime($curDate) > strtotime($eventDate))以及其他比较

答案 1 :(得分:0)

您可以将它们转换为DateTime对象或时间戳进行比较。字符串比较只会检查它们是否相等。

所以:

$now = new DateTime();
$event = new DateTime($eventDate . ' ' . $startTime);

然后,您可以按照与之相同的方式检查日期是否相同。请参阅php网站的Example #2 on the Date Diff page。例如。 $now > $event等等。

答案 2 :(得分:0)

应该是elseif.not else if if。在else和if之间不应该有空格。