2013-04-04 88 views
2

我對createFromFormat的行爲感到困惑。PHP DateTime createFromFormat不會自然死亡

private function _event_date($eventdate) { 

    $this->_logger->err($eventdate); 

    $dt = new DateTime(); 

    $dt->createFromFormat(DATE_ISO8601, $eventdate); 

    $formatted = $dt->format("m/d/Y"); 

    $this->_logger->err($formatted); 

    return $formatted; 
} 

我多次調用_event_date。我期望當我創建一個新的DateTime對象時,它會接受$ eventdate併產生一個新的格式化日期。

奇怪的是(對我),我的輸出看起來就像這樣:

2013-04-04 15:10:26 UTC error _event_date 2013-04-05T21:00:00-0400 
2013-04-04 15:10:26 UTC error _event_date 04/04/2013 
2013-04-04 15:10:26 UTC error _event_date 2013-04-12T20:00:00-0400 
2013-04-04 15:10:26 UTC error _event_date 04/04/2013 
2013-04-04 15:10:26 UTC error _event_date 2013-04-16T18:00:00-0400 
2013-04-04 15:10:26 UTC error _event_date 04/04/2013 
2013-04-04 15:10:26 UTC error _event_date 2013-04-17T19:30:00-0400 
2013-04-04 15:10:26 UTC error _event_date 04/04/2013 
2013-04-04 15:10:26 UTC error _event_date 2013-04-18T20:00:00-0400 
2013-04-04 15:10:26 UTC error _event_date 04/04/2013 

看來,由於某種原因,日期是堅持我原來的$ EVENTDATE值。

這是爲什麼?我誤解了一些關於createFromFormat如何工作的內容?我是否錯過了PHP的對象模型? PHP把東西放在我的飲料中了嗎?

--------------答案----------------

下面馬克B的答案不解決這個問題:

// month/day/year 
private function _event_date($eventdate) { 

    $this->_logger->err($eventdate); 

    $dt = DateTime::createFromFormat(DATE_ISO8601, $eventdate); 

    $formatted = $dt->format("m/d/Y"); 

    $this->_logger->err($formatted); 

    return $formatted; 
} 

其產生正確的結果:

2013-04-04 15:34:56 UTC error _event_date 2013-04-04T19:30:00-0400 
2013-04-04 15:34:56 UTC error _event_date 04/04/2013 
2013-04-04 15:34:56 UTC error _event_date 2013-04-05T21:00:00-0400 
2013-04-04 15:34:56 UTC error _event_date 04/05/2013 
2013-04-04 15:34:56 UTC error _event_date 2013-04-12T20:00:00-0400 
2013-04-04 15:34:56 UTC error _event_date 04/12/2013 
2013-04-04 15:34:56 UTC error _event_date 2013-04-16T18:00:00-0400 
2013-04-04 15:34:56 UTC error _event_date 04/16/2013 
2013-04-04 15:34:56 UTC error _event_date 2013-04-17T19:30:00-0400 
2013-04-04 15:34:56 UTC error _event_date 04/17/2013 
2013-04-04 15:34:56 UTC error _event_date 2013-04-18T20:00:00-0400 
2013-04-04 15:34:56 UTC error _event_date 04/18/2013 
+0

我不知道,'公共static'方法是明智調用爲'非static' ...這應該只是'日期時間:: createFromFormat()'和** **不是'$ DT-> createFromFormat();'... – shadyyx 2013-04-04 15:31:44

回答

5

createFromFormat是一個靜態方法,嘗試

$date = DateTime::createFromFormat(DATE_ISO8601, $eventdate); 
而不是

它返回一個DateTime對象,你沒有捕獲,所以是的,你「記住」以前設置的日期,這恰好是「現在」,因爲你沒有傳遞一個日期作爲構造函數參數。

+0

這確實解決了這個問題。謝謝。 – lysdexia 2013-04-04 15:36:47

+0

@lysdexia不要忘記接受答案。 – HamZa 2013-04-05 21:53:56