2017-06-12 119 views
-3

我試圖計算天數兩個日期之間的區別,這裏有兩個日期:DATEDIFF在MySQL不工作

$date_1 = "2017-06-12 13:44:58"; 
$date_2 = "2017-05-04 19:06:24"; 

當我做到這一點通過PHP腳本,它給了38的結果,這是正確的。

$datediff = strtotime($date_1) - strtotime($date_2); 
echo floor($datediff/(60 * 60 * 24)); 

結果:38 ---->正確
因爲還有在給定日期的小時差

但是,當我做同樣的在MySQL,那麼它結果爲39,這是錯誤的。

select DATEDIFF("2017-06-12 13:44:58","2017-05-04 19:06:24") 

結果:39 ---->錯誤

+1

PHP的實際差異(如果您刪除'floor()'函數)是'38.776782407407'。如果38是正確的而39不是,那是因爲你有一個你沒有真正分享的特定定義。 –

+0

但我需要38作爲結果,因爲它會是39時,兩個日期將相等,意思是,當2017-06-12 13:44:58將達到19:06:24 –

+0

使用更明顯的例子:多少天昨天在0:00:00和今天23:59:59有嗎?你的**確切**定義是什麼? –

回答

1

從MySQL的幫助:

DATEDIFF()返回表達式1 - 表達式2表示爲天的值從 一個日期到另一個。 expr1和expr2是日期或日期和時間 表達式。 只有數值的日期部分用於 計算

您可以使用TIMESTAMPDIFF代替:

select ABS(TIMESTAMPDIFF(DAY,"2017-06-12 13:44:58","2017-05-04 19:06:24")); 
+---------------------------------------------------------------------+ 
| ABS(TIMESTAMPDIFF(DAY,"2017-06-12 13:44:58","2017-05-04 19:06:24")) | 
+---------------------------------------------------------------------+ 
|                 38 | 
+---------------------------------------------------------------------+ 
+0

這很好,我們不能從結果中刪除( - ),我的意思是它會更好,如果它只顯示38 –

+1

請參閱編輯:'ABS'給出絕對值。 –

+0

@Insomania你可以刪除( - )交換你的參數 – Santosh

0

你可以做這樣的事情:

SELECT FLOOR(ABS(TIMESTAMPDIFF(HOUR, "2017-06-12 13:44:58","2017-05-04 19:06:24")/24)); 

TIMESTAMPDIFF(HOUR...)將獲得每小時 的差異,所以我們必須用24分纔到以天爲單位獲得差異。

ABS是爲了避免產生負數。