【问题标题】:PHP DateTime createFromFormat will not die a natural deathPHP DateTime createFromFormat 不会自然死亡
【发布时间】:2013-04-04 15:20:55
【问题描述】:

我对 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

似乎出于某种原因,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;
}

这会产生正确的结果:

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

【问题讨论】:

  • 我不知道将public static 方法称为non-static... 应该只是DateTime::createFromFormat()不是 $dt->createFromFormat();.. .

标签: php datetime iso8601


【解决方案1】:

createFromFormat 是静态方法,试试

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

改为。

它返回一个 DateTime 对象,您没有捕获该对象,所以是的,您正在“记住”之前设置的日期,恰好是“现在”,因为您没有将日期作为构造函数传递论据。

【讨论】:

  • 这确实解决了问题。谢谢。
猜你喜欢
  • 2017-11-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2014-08-07
相关资源
最近更新 更多