我有一個PHP的DateTime diff方法奇怪的問題。我一直在使用DateTime方法,並認爲我已經掌握了它,但這個問題讓我感到驚訝。PHP日期時間差異奇怪的結果
我正在使用diff方法來確定兩個日期之間的月/日數。 今天,我用下面的代碼:
$start = new DateTime('2012-03-01');
$end = new DateTime('2012-03-31');
$period = $start->diff($end);
var_dump($period);
這產生了以下的輸出:
object(DateInterval)[3]
public 'y' => int 0
public 'm' => int 1 // Shouldn't this be 0?
public 'd' => int 1 // And where does this come from? Would expect 30.
public 'h' => int 0
public 'i' => int 0
public 's' => int 0
public 'invert' => int 0
public 'days' => int 30
正如我的評論上面說,那裏是地獄做的1m1d來自(我希望0m30d)。我不能爲我的生活找出它從哪裏獲得這個價值。我也試着在兩個日期後面放置午夜時間戳00:00:00
以確保它不是時間事物,但是這對輸出沒有影響。
有人可以向我解釋這個結果嗎? 這個問題發生在我的Debian開發服務器上,運行Xdebug 2.1.1和Suhosin 0.9.32.1安裝PHP 5.3.3。
更新
轉載我的生產服務器,這是在CentOS 6.0的「原始」 PHP 5.3.8沒有任何擴展/補丁解決這個問題。
更新2
我設法找到一個「解決辦法」(只有在這個時刻工作)。如果我將絕對日期更改爲:
$start = new DateTime('first day of next month');
$end = new DateTime('last day of next month');
它確實給0m30d作爲輸出。儘管如此,如果有人對此有所瞭解,請讓我知道!
非常感謝!這正是問題所在。我調整我的代碼使用'新的DateTime('2012-03-01',新的DateTimeZone('UTC'));'和'新的DateTime('2012-03-31',新的DateTimeZone('UTC')); 「相反,那就是訣竅。 – Oldskool