2011-03-08 88 views
2

我正在嘗試使用DateTime類(php> = 5.3)來計算2日期的差異。使用DateTime類計算日期差異的錯誤

手冊中的例子很簡單明瞭,我嘗試過這個例子並且工作得很好。 但是,如果改變的開始和結束日期,還有一個問題:

 $this->start_date = '2011-03-01'; 
     $this->end_date = '2011-03-31'; 

     var_dump($this->start_date, $this->end_date); 

     $datetime1 = new DateTime($this->start_date); 
     $datetime2 = new DateTime($this->end_date); 

     $interval = $datetime2->diff($datetime1); 

     echo $interval->format('%a total days')."\n"; 
     echo $interval->format('%m month, %d days'); 

輸出是:

30 total days  //ok 
1 month, 2 days //no! i think it should be 0 month, 30 days 

同月不工作得很好! :)

+1

我的電腦吐出'總共6015天,'1個月,2天'。有趣的...... D – Czechnology 2011-03-08 16:56:00

+0

@Czechnology也許它考慮到28天的3月! :D我沒有和其他月份一起試過,只用了Jan,並且它和手動例子一樣運作良好。 – 2011-03-08 16:59:55

+1

我已經做了一些測試設置日期到其他月份,在我看來,有一個錯誤的地方。 3月份被認爲是28天,4月份是31月。 – krtek 2011-03-08 17:01:27

回答

1

2月28天沒有嗎?它可能會出於某種原因選擇2月份的「月份」單位。該方法的PHP文檔似乎表明這種事情很容易就是這種情況。說「x個月」並不太有用,因爲一個月不是固定單位,可能是28,29,30或31天。

下面摘錄PHP dateinterval format documentation

的DateInterval ::格式()方法並 不 時間字符串,也不是在時間段重新計算結轉分。 這是預期的,因爲它不是 可能會溢出值,例如「32 天」,可能會將其解釋爲 任何內容從「1個月和4天」到 「1個月和1天」。

+0

我從2011年1月1日到2011年1月31日的一月份試過,輸出爲0個月,30天...... – 2011-03-08 17:04:14

+1

我並不是說它必然會假設一個月是28天(儘管它看起來就像它在主要問題的例子中所做的那樣)......我說的是他們在文檔中承認這種轉換是不準確的。在我看來,最好避免。 – 2011-03-08 17:07:46

+0

thx爲您的幫助!我想要間隔的天數,幸運的是運作良好(格式(%a))....我不明白爲什麼與揚運作良好,其他沒有...只爲好奇! :) – 2011-03-08 17:14:12