2011-06-20 153 views
2

可能重复:
php date comparePHP比较日期

我有我从MySQL数据库看起来像这样采取日期:

2011-06-20 

我也得到以这种方式当天的日期:

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

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

如何比较日期并了解例如从数据库日期或一个月或一年中传递一周的情况..等等..?

谢谢!

回答

2

当MySQL有内置的功能时,没有必要把这种负担放在PHP上。你应该在MySQL的DATEDIFF()功能来看一看:

DATEDIFF()回报expr1 - expr2表示为从一个日期至另一个在天的值。 expr1expr2是日期或日期和时间表达式。计算中只使用数值的日期部分。

其会给一个7天的差的两个日期的一个例子可以是:

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

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

+0

你能提供一个例子吗?例如7天的差异?我真的不知道从哪里开始!谢谢! –

+0

我已经添加了一个示例。答案中链接的文档中提供了更多示例。 – kba

1

如何考虑使用UNIX_TIMESTAMP?它使用经过时间的概念。

+0

它很容易出现2038的日期限制......;) – Frankie

+0

@Frankie 2038在...... *未来*〜 – mauris

+0

@thephpdeveloper你看过那些大片的电影,它们毁灭了我们所知道的世界,但保持你的网络服务器运行?那里。我想你可以添加一个cron到2037来重新设置你的日期到1970年... – Frankie

0

你需要考虑你正在寻找什么。

  • 您是否希望筛选超过一周的日期?你可以在SQL上进行比较,并且不会给日期比较带来负担。

  • 想要日期差异吗?再次,我建议把它放在SQL中,只显示结果。

0

这会给你秒的两个日期之间的数字:

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

您可以通过86,400除以这个值来获得的天数,等等。

+0

这可以通过夏令时的变化绊倒,特别是如果你需要比“1天”更高的精度。不推荐。 – staticsan

1

比较两个或更多日期的“旧”方法是使用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