【发布时间】:2011-06-20 00:24:35
【问题描述】:
可能重复:
php date compare
我从 mySQL 数据库中获取的日期如下所示:
2011-06-20
我通过这种方式得到当天的日期:
$todaydate = date('Y-m-d');
我需要知道的是如何比较这两个结果?
我如何比较日期并了解例如从数据库日期或一个月或一年...等过去一周?
谢谢!!
【问题讨论】:
可能重复:
php date compare
我从 mySQL 数据库中获取的日期如下所示:
2011-06-20
我通过这种方式得到当天的日期:
$todaydate = date('Y-m-d');
我需要知道的是如何比较这两个结果?
我如何比较日期并了解例如从数据库日期或一个月或一年...等过去一周?
谢谢!!
【问题讨论】:
当 MySQL 已经为 PHP 提供了内置功能时,没有必要给 PHP 增加负担。你应该看看 MySQL 的 DATEDIFF() 函数:
DATEDIFF()返回expr1–expr2,表示为从一个日期到另一个日期的天数。expr1和expr2是日期或日期和时间表达式。计算中仅使用值的日期部分。
两个日期相差 7 天的示例如下:
mysql> select datediff('2011-06-18','2011-06-25');
+-------------------------------------+
| datediff('2011-06-18','2011-06-25') |
+-------------------------------------+
| -7 |
+-------------------------------------+
这意味着第一个日期发生在第一个日期后 -7 天;那是 7 天之前。如果让这两个参数交换位置,结果将是正数 7。
【讨论】:
考虑使用 UNIX_TIMESTAMP 怎么样?它使用经过时间的概念。
【讨论】:
比较两个或多个日期的“旧”方法是使用 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。
【讨论】:
当然date_diff 有很多例子。
【讨论】:
您需要考虑您到底在寻找什么。
您是否要过滤超过一周的日期?您可以在 SQL 上进行这种比较,并且不会给 PHP 带来日期比较的负担。
您想要日期差异吗?同样,我建议将其放入 SQL 中并仅显示结果。
【讨论】:
这将为您提供两个日期之间的秒数:
<?php
$time = '2011-06-20';
$timeDiff = time() - strtotime($time);
echo $timeDiff;
?>
您可以将此值除以 86,400 以获得天数,等等。
【讨论】: