【问题标题】:PHP compare dates <= and >= doesn't work properlyPHP比较日期<=和>=不能正常工作
【发布时间】:2014-02-28 14:46:06
【问题描述】:

我正在尝试比较两个 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 >= 20/03/2014 && 28/02/2014 标题

以下是日期值:

date('d/m/Y') = 28/02/2014
$newsDateFrom = 20/03/2014
$dateUntil  = 27/02/2014

【问题讨论】:

  • 你有你的变量倒退。切换你的fromuntil

标签: php mysql date compare operators


【解决方案1】:

真的...停止滥用日期系统。 $today = strtotime(date('d/m/Y')); 完全没有意义。 $today = time() 是不那么复杂且效率更高的版本。

另外,为什么在 PHP 中可以简单地在 MySQL 中进行时间过滤?

SELECT *
FROM ph_news
WHERE (newActive = 1) AND (curdate() BETWEEN newsDateFrom AND newsDateUntil)

将只获取您真正想要的记录。现在,您几乎获取了整个表,然后丢弃了几乎所有内容,除了您真正想要的几条记录。

【讨论】:

  • + 1 。 . . “停止滥用日期系统”,我喜欢这样。
  • 首先感谢您的回答。但我必须补充一点,日期“从”和“直到”以这种类型 dd/mm/yyyy 存储在 MySQL 中。 curdate() 如果是字符串则返回格式为 'YYYY-MM-DD' 的日期,如果是数字则返回 YYYYMMDD (dev.mysql.com/doc/refman/5.0/en/…)。这就是为什么您的查询在我的场合似乎不起作用的原因。我必须以某种方式将日期与这种格式进行比较。 dd/mm/yyyy
  • 您确实应该以原生格式存储日期。看看你必须添加多少代码来处理你的非标准格式,v.s.一旦你成为本地人并且可以在数据库中做所有事情,它变得多么容易。
  • 是的,你是对的,但如果这里的人们只能轻松阅读 dd/mm/yyyy 格式,我该怎么办?我唯一能做的就是转换日期类型。反正。谢谢。
  • 这是显示问题。例如在输出供人类消费的日期之前,您在客户端代码中执行的操作。在内部,您应该始终使用原生类型。
猜你喜欢
  • 1970-01-01
  • 2021-08-20
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
相关资源
最近更新 更多