我正在尝试比较两种类型为d / m / y的日期字符串,但似乎与该类型日期的比较不起作用。我想使用DateTime PHP的功能,但首先我想了解为什么上面的脚本不起作用。
以下是代码:
public function listActiveNews(){
$today = strtotime(date('d/m/Y'));
$db = mysql_init();
$sql = "SELECT * FROM ph_news WHERE newActive = 1";
$prq = $db->prepare($sql);
$prq->execute();
foreach($prq->fetchAll(PDO::FETCH_ASSOC) as $fetch){
$dateFrom = strtotime($fetch['newsDateFrom']);
$dateUntil = strtotime($fetch['newsDateUntil']);
if ( ($today >= $dateFrom) && ($today <= $dateUntil) ){
print date('d/m/Y') . " >= " . $fetch['newsDateFrom'] .
" && " . date('d/m/Y') . " <= " .
$fetch['newsDateUntil'] ."<br>" ;
print $fetch['Title'];
}
}
}
我收到了这个结果,我无法理解为什么这些日期的比较在if
子句中返回TRUE。
输出:
28/02/2014&gt; = 20/03/2014&amp;&amp; 28/02/2014&lt; = 27/02/2014
标题
以下是日期值:
date('d/m/Y') = 28/02/2014
$newsDateFrom = 20/03/2014
$dateUntil = 27/02/2014
答案 0 :(得分:4)
真的......停止滥用日期系统。 $today = strtotime(date('d/m/Y'));
完全没有意义。 $today = time()
是一个不那么复杂且效率更高的版本。
另外,为什么要在PHP中进行时间过滤,而只能在MySQL中进行过滤?
SELECT *
FROM ph_news
WHERE (newActive = 1) AND (curdate() BETWEEN newsDateFrom AND newsDateUntil)
只会获取您真正想要的记录。现在你几乎拿走了整个桌子,然后扔掉了除了你真正想要的几条记录之外的大部分内容。