PHP DateTime类产生意外结果


PHP DateTime Class Producing Unexpected Results

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

<?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类文档中定义,因此此行为是未定义的,您不能依赖此类代码。为了将日期时间表示为字符串,您应该使用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文档中阅读更多关于可能的format参数的信息。