2011-03-15 177 views
2
$date1 = "2000-01-01"; 
$date2 = "2011-03-14"; 

$diff = abs(strtotime($date2) - strtotime($date1)); 
$years = floor($diff/(365 * 60 * 60 * 24)); 
$months = ceil(($diff - ($years * 365 * 60 * 60 * 24))/((365 * 60 * 60 * 24)/12)); 
$months2 = floor(($diff - ($years * 365 * 60 * 60 * 24))/((365 * 60 * 60 * 24)/12)); 
$days = floor(($diff - $years * 365 * 60 * 60 * 24 - $months2 * 30 * 60 * 60 * 24)/ (60 * 60 * 24)); 

我得到的答案是11 years , 2 months and 14 days。不應該是11 years, 3 months and 14 days計算日期之間的年/月/日

我已經嘗試了很多不同的方法,我總是以2個月而不是3個月爲目標。有誰知道爲什麼嗎?

+0

爲什麼會是3個月?不到90天已經過了所以它的<3個月 – JohnP 2011-03-15 08:23:39

+0

你爲什麼認爲應該是3個月?畢竟1和3之間的差異是2 ..如果有的話,應該是2個月和* 13天* ..順便說一句。日期差異總是很困難,並且取決於「月」的定義。 – poke 2011-03-15 08:24:14

+0

我在你的日期之間只看到兩個月:Januar&Februar。你爲什麼認爲應該有三個? – ZeissS 2011-03-15 08:25:03

回答

3

你得到的答案是完全正確的!

+0

*頭重擊* .....當然......我到底在想什麼!我的客戶得到了我的整個頭擰!謝謝你的清晰度 – andy 2011-03-15 08:30:51

8

嘗試使用PHP的內置日期API,而不是自己做數學。

使用DateTimeDateIntervalDateTime::diff功能:

$date1 = new DateTime("2000-01-01"); 
$date2 = new DateTime("2011-03-14"); 
$diff = $date2->diff($date1); 
var_dump($diff);' 
/* is prints: 
object(DateInterval)#3 (8) { 
    ["y"]=> 
    int(11) 
    ["m"]=> 
    int(2) 
    ["d"]=> 
    int(13) 
    ["h"]=> 
    int(0) 
    ["i"]=> 
    int(0) 
    ["s"]=> 
    int(0) 
    ["invert"]=> 
    int(1) 
    ["days"]=> 
    int(4090) 
} 
*/ 

至少您不必擔心,如果你犯了一個錯誤(結果似乎是正確的)。

+0

我只有5.2我相信它的工作原理只有5.3 ..我可能是錯誤的...我昨天試過了,它沒有工作..這是熱解釋我得到了...但不管怎麼說解決了這個問題... – andy 2011-03-15 08:35:40

相關問題