2010-11-11 30 views
1

當我從日期時間對象中減去1天時,它按照它應該的那樣做,它會減去一天。但如果我使用diff()來比較2個日期時間對象,它會再次減去這一天。您可以在下面的代碼示例,請參閱:使用php日期時間對象的奇怪行爲 - 第二次調用diff時從日期中減去()

$currTime = new DateTime(); 
$lastPurge = new DateTime("14:33"); 
$lastPurge->sub(new DateInterval("P1D")); 

echo $lastPurge->format("d/m/Y H:i:s\n\n"); 

$diff = $currTime->diff($lastPurge); 

echo $lastPurge->format("d/m/Y H:i:s\n\n"); 

從代碼的輸出是:

10/11/2010 14時33分00秒

09/11/2010 14: 33:00

正如你所看到的,在調用sub()後,它已經減去了1天,如預期的那樣。但是,在使用diff()之後,它會減去另一天。爲什麼在使用diff()計算差異之後再減去另一天?它應該這樣做嗎?

回答

1

無法重現於PHP 5.3.3,與美國/紐約時區:

php > $currTime = new DateTime(); 
php > $lastPurge = new DateTime("14:33"); 
php > $lastPurge->sub(new DateInterval("P1D")); 
php > 
php > echo $lastPurge->format("d/m/Y H:i:s\n\n"); 
09/11/2010 14:33:00 

php > 
php > $diff = $currTime->diff($lastPurge); 
php > 
php > echo $lastPurge->format("d/m/Y H:i:s\n\n"); 
09/11/2010 14:33:00 

你是正確的,diff隻字未提修改或者輸入參數。

編輯:這是bug 49059changelog表示修復程序的第一個版本是5.3.3。

+0

也許這是我使用的PHP版本中的一個錯誤。我已經在Windows上使用澳大利亞/ Broken_Hill時區和PHP 5.3.2在Mac OS X(同一時區)上使用php 5.3.1進行了試用。我會嘗試構建最新的PHP版本,看看是否能修復它。 – Yoshi 2010-11-11 04:47:32

+0

謝謝!現在構建最新的PHP版本。我認爲留在版本之上是值得的。 – Yoshi 2010-11-11 05:36:35