【问题标题】:PHP compare dates [duplicate]PHP比较日期[重复]
【发布时间】:2011-06-20 00:24:35
【问题描述】:

可能重复:
php date compare

我从 mySQL 数据库中获取的日期如下所示:

2011-06-20

我通过这种方式得到当天的日期:

$todaydate = date('Y-m-d');

我需要知道的是如何比较这两个结果?

我如何比较日期并了解例如从数据库日期或一个月或一年...等过去一周?

谢谢!!

【问题讨论】:

    标签: php date compare


    【解决方案1】:

    当 MySQL 已经为 PHP 提供了内置功能时,没有必要给 PHP 增加负担。你应该看看 MySQL 的 DATEDIFF() 函数:

    DATEDIFF() 返回expr1expr2,表示为从一个日期到另一个日期的天数。 expr1expr2 是日期或日期和时间表达式。计算中仅使用值的日期部分。

    两个日期相差 7 天的示例如下:

    mysql> select datediff('2011-06-18','2011-06-25');
    +-------------------------------------+
    | datediff('2011-06-18','2011-06-25') |
    +-------------------------------------+
    |                                  -7 | 
    +-------------------------------------+
    

    这意味着第一个日期发生在第一个日期后 -7 天;那是 7 天之前。如果让这两个参数交换位置,结果将是正数 7。

    【讨论】:

    • 您能举个例子吗?例如7天的差异?我真的不知道从哪里开始!谢谢!
    • 我添加了一个示例。答案中链接的文档中提供了更多示例。
    【解决方案2】:

    考虑使用 UNIX_TIMESTAMP 怎么样?它使用经过时间的概念。

    【讨论】:

    • 它很容易受到 2038 日期限制... ;)
    • @Frankie 2038 在... *未来*~
    • @thephpdeveloper 你有没有看过那些大片的电影,它们摧毁了我们所知道的世界,但让你的网络服务器保持运行?那里。我想你可以在 2037 中添加一个 cron 来将你的日期重置为 1970 年......
    • 如果程序员的行为和使用 time_t 类型,而不是 uint32 类型,我们是安全的! time_t 肯定会在 uint32 溢出之前更改为 uint64 ......或者我希望如此
    • @Frankie 我知道所有溢出的东西。只是说'
    【解决方案3】:

    比较两个或多个日期的“旧”方法是使用 strtotime() 函数将其转换为 unix 时间戳(浮点秒数)。例如:

    if((strtotime('2011-05-10') - strtotime('2011-05-01')) > 604800)
    {
        echo('A week has passed');
    }
    
    if((strtotime('2011-06-10') - strtotime('2011-05-01')) > 2629743)
    {
        echo('A month has passed');
    }
    

    或者“新”方法是使用与 PHP 5.2 或更新版本捆绑的 DateTime 类。看看http://php.net/manual/en/book.datetime.php

    【讨论】:

      【解决方案4】:

      当然date_diff 有很多例子。

      【讨论】:

        【解决方案5】:

        您需要考虑您到底在寻找什么。

        • 您是否要过滤超过一周的日期?您可以在 SQL 上进行这种比较,并且不会给 PHP 带来日期比较的负担。

        • 您想要日期差异吗?同样,我建议将其放入 SQL 中并仅显示结果。

        【讨论】:

          【解决方案6】:

          这将为您提供两个日期之间的秒数:

          <?php
          $time = '2011-06-20';
          $timeDiff = time() - strtotime($time);
          echo $timeDiff;
          ?>
          

          您可以将此值除以 86,400 以获得天数,等等。

          【讨论】:

          • 这可能会因夏令时更改而出错,尤其是当您需要比“1 天”更精确的情况时。不推荐。
          猜你喜欢
          • 1970-01-01
          • 2017-05-09
          • 2014-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-28
          • 1970-01-01
          • 2011-02-14
          相关资源
          最近更新 更多