PHP 日期时间 Class 产生意外结果

PHP DateTime Class Producing Unexpected Results

我已经习惯了 DateTime Class 并且从下面的代码中得到了意想不到的结果:

<?php  
  $now =  date("Y-m-d H:i:s");
  echo $now .'</br>';
  $newDate = date("Y-m-d H:i:s",strtotime("$now + 1 years"));
  $converted = strtotime("$newDate");
  $outputDate = new DateTime("@$converted");
  var_dump($outputDate);
  echo "Output - ". $outputDate->date;
?>

当我有 var_dump($outputDate) 时,我得到了预期的输出(即输出字符串在末尾):

2015-03-29 23:08:30
object(DateTime)#1 (3) { ["date"]=> string(26) "2016-03-29 21:08:30.000000"   
["timezone_type"]=> int(1) 
["timezone"]=> string(6) "+00:00" } Output - 2016-03-29 21:08:30.000000

然而,当我有完全相同的代码并注释掉时 var_dump($outputDate):

<?php  
  $now =  date("Y-m-d H:i:s");
  echo $now .'</br>';
  $newDate = date("Y-m-d H:i:s",strtotime("$now + 1 years"));
  $converted = strtotime("$newDate");
  $outputDate = new DateTime("@$converted");
  // var_dump($outputDate);
  echo "Output - ". $outputDate->date;
?>

我刚刚得到:

2015-03-29 23:14:13
Output -

我不确定为什么 var_dump($outputDate) 行允许我输出日期。我已经使用不同的方法解决了这个问题,但我很好奇为什么会这样。有什么建议吗?

date 属性 未在 Datetime class docs 中定义,因此此行为是 未定义,您不能依赖此类代码。为了让您的日期时间表示为字符串,您应该使用 format() 方法,如下所示:

echo "Output - ". $outputDate->format("Y-m-d H:i:s");
//or with procedural style
echo "Output - ". date_format($outputDate,"Y-m-d H:i:s");

您可以在 PHP docs 上阅读更多关于可能的 format 参数的信息。