2013-04-04 86 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