2010-01-25 95 views
2

我想比較PHP中的兩個日期,並計算出日期之間有多少天。我從MySQL數據庫中獲取第一個日期,第二個日期是當前日期。在MySQL數據庫中的日期看起來像這樣「2010-01-21 15:21:46」PHP中的日期差異?

$date1 = date("Y-m-d", $product['hold_date']) 
$date2 = date("Y-m-d"); 

我如何比較這兩個日期,並簡單地返回天量?

編輯-------------------------------------------- -------------------------------------

這工作:

$date1 = date(strtotime('2009-12-25 15:21:46')); 
$date2 = time(); 

$secondsDifference = $date2 - $date1; 
$days = floor($secondsDifference/86400); 

echo $days; 

回答

4
$secondsDifference = $date2 - $date1; 

這是日期2和日期1之間的秒數。您可能需要重新排序,具體取決於將來哪一個更近/更遠。當然,如果你想要一個正數。

或者你可以使用:

$secondsDifference = abs($date2 - $date1); 

你可以做簡單的算術題,找出天

define("SECONDS_IN_DAY", 60*60*24); 
$days = floor($secondsDifference/SECONDS_IN_DAY); // rounds down 
// you can use ceil() to round it up. 

的數量爲了獲得MySQL的日期到秒的格式,使用strtotime()

$time = strtotime($mysql_time); 

所以這樣做:

$date1 = strtotime($product['hold_date']); 
$date2 = time(); 
+0

我還以爲是設置的值的日期函數$ date1和$ date2返回了一個相關格式的字符串,而不是秒數,所以你不能相互減去它們? – 2010-01-25 00:52:51

+0

這是爲我返回0,不知道爲什麼? – mike 2010-01-25 00:56:30

+0

我查閱了文檔(http://php.net/manual/en/function.date.php),它說它確實會返回一個字符串,這幾乎可以肯定你爲什麼返回0;從另一個字符串中減去一個字符串對PHP沒有任何意義。 – 2010-01-25 01:04:15

0
$secondsPerDay = 24 * 60 * 60; 
$differenceInSeconds = $date2 - $date1; 
$differenceInDays = $differenceInSeconds/$secondsPerDay; 
+0

使用'floor()',你贏了;) – Franz 2010-01-25 00:37:09

+0

好點,只要整數是理想的。 – echo 2010-01-25 00:38:17

+0

$ date1 = date('Y-m-d','2010-01-22 15:21:46'); $ date2 = date('Y-m-d'); $ secondsPerDay = 24 * 60 * 60; $ differenceInSeconds = $ date2 - $ date1; $ differenceInDays = $ differenceInSeconds/$ secondsPerDay; echo $ differenceInDays; 這將返回0.000474537037037 – mike 2010-01-25 00:46:18

0

如果你可以將日期轉換爲時間戳,你可以做這樣的:

$numDays = floor(($timestamp2 - $timestamp1)/(24 * 60 * 60)); 
+0

爲什麼downvote? – Franz 2010-01-25 00:49:52

0
$d1 = strtotime("2010-01-21 15:21:46"); 
$d2 = strtotime($product['hold_date']); 
echo floor(($d2-$d1)/86400) ; 
2

Strtotime會將日期/時間字符串轉換爲unix時間戳,給定時間與th之間的秒數e unix時代(1970年1月1日)。 time函數現在將爲您提供unix時間戳。

然後,您可以從另一個日期開始計算相隔的秒數,然後除以86400(60x60x24)以獲得已過去的天數。

作爲將MySQL日期時間轉換爲PHP內部的unix的替代方法,您可以使用UNIX_TIMESTAMP MySQL函數。

編輯:正如其他人所說,你可能想floor()或ceil()得到一個整數的天數。

1

我可以建議你使用MySQL(如果可能)來計算日期差異嗎? MySQL的日期函數遠遠優於PHP。試想一下:

# with CURDATE() resolving to 2010-01-25, this returns -3 
SELECT DATEDIFF('2010-01-22 15:21:46', CURDATE()); 

所以,我想你現在正在做這樣的事情:

SELECT 
    product_id, 
    hold_date 
FROM 
    products 
WHERE 
    something = true 

只需將它改成:

SELECT 
    product_id, 
    hold_date, 
    DATEDIFF(hold_date, CURDATE()) as hold_date_diff_days 
FROM 
    products 
WHERE 
    something = true