PHP DateTime createFromFormat不会自然消亡

标签 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;
}

我多次调用_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

最佳答案

createFromFormat是一个静态方法,尝试一下

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

相反。

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

关于PHP DateTime createFromFormat不会自然消亡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15815300/

相关文章:

PHP Mcrypt - 解密函数不适用于一小部分字符串

JavaScript 日期和年份

javascript - NodeTime中ISO-8601格式值的偏移格式从何而来?

python - 转换为 Unix 时间时如何指定时区(UTC)? (Python)

使用 DateTimeFormatter 解析 Java Time 的基于周的年模式

php - 我该如何解决 "laravel/horizon v1.1.0 requires ext-pcntl * -> the requested PHP extension pcntl is missing from your system"?

php - 在 PHP 输出中打印 HTML 标签

php - schemadb + ZendFramework 集成,用于在开发时快速增长数据库

python - Django 日期时间字段 - 在 View 中转换为时区

java - 调用 `new Date(long)` 结果是 "Jan 01 01:00:00 CET 1970"?