2011-06-20 152 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