为什么我无法在 PHP 的 DateTime 类中访问 DateTime->date?

2022-08-30 07:35:05

使用该类,如果我尝试运行以下代码:DateTime

$mydate = new DateTime();
echo $mydate->date;

我会找回这个错误消息

注意:未定义的属性:日期时间::$date...

这没有意义,因为在变量上运行时,它清楚地表明此属性存在并且可以公开访问:var_dump()$mydate

var_dump($mydate);

object(DateTime)[1]
  public 'date' => string '2012-12-29 17:19:25' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'UTC' (length=3)

这是PHP中的一个错误,还是我做错了什么?我使用的是 PHP 5.4.3。


答案 1

这是一个已知问题

日期可用实际上是支持此处的副作用 - derick@php.netvar_dump()

由于某种原因,您不应该能够访问该属性,但无论如何都会显示它。如果您真的想以该格式获取日期,请使用 DateTime::format() 函数。var_dump

echo $mydate->format('Y-m-d H:i:s');

答案 2

更新:PHP7.3中的行为已更改,原始答案不再有效。要获得所有 PHP 版本(包括 >=7.3)的相同结果,可以使用以下代码:

$dt = new DateTime();
$date = $dt->format('Y-m-d\TH:i:s.v');

为了记录,原始答案:

除了调用之外,您还可以使用反射访问属性:DateTime::format()

<?php

$dt = new DateTime();
$o = new ReflectionObject($dt);
$p = $o->getProperty('date');
$date = $p->getValue($dt);

这比使用稍微快一些,因为格式化已经格式化的时间字符串。特别是如果你在循环中多次这样做。format()format()

但是,这不是 PHP 记录的行为,它可能随时更改。


推荐