lys*_*xia 2 php datetime iso8601
我对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;
}
Run Code Online (Sandbox Code Playgroud)
我多次调用_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
Run Code Online (Sandbox Code Playgroud)
看来由于某种原因,DateTime持有我原来的$ eventdate值.
为什么是这样?我是否误解了createFromFormat的工作原理?我错过了PHP的对象模型吗?PHP在我的饮料中加了些东西吗?
--------------回答----------------
Marc 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;
}
Run Code Online (Sandbox Code Playgroud)
这产生了正确的结果:
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
Run Code Online (Sandbox Code Playgroud)
createFromFormat是一个静态方法,Try
$date = DateTime::createFromFormat(DATE_ISO8601, $eventdate);
Run Code Online (Sandbox Code Playgroud)
代替.
它返回一个你没有捕获的DateTime对象,所以是的,你正在"记住"之前设置的日期,恰好是"现在",因为你没有将日期作为构造函数参数传递.
归档时间: |
|
查看次数: |
453 次 |
最近记录: |