我使用以下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结果,而这个结果总是会导致真......
数据库表
当我回显变量时,我得到以下内容:
$curTime = 09:30:00
$curDate = 2017-19-03
$eventDate = 2017-03-21
$startTime = 13:00:00
我意识到这不是最漂亮的代码,但根据我的小经验和逻辑,它应该通过两个如果... ...
任何建议表示赞赏
答案 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之间不应该有空格。