Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP DateTime类产生意外结果_Php_Datetime_Var Dump - Fatal编程技术网

PHP DateTime类产生意外结果

PHP DateTime类产生意外结果,php,datetime,var-dump,Php,Datetime,Var Dump,我已经习惯了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")

我已经习惯了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\u dump($outputDate)


我不知道为什么使用
var\u dump($outputDate)
行可以输出日期。我用不同的方法解决了这个问题,但我很好奇为什么会这样。有什么建议吗?

date
属性未在中定义,因此此行为未定义,您不能依赖此类代码。要将日期时间表示为字符串,应使用如下方法:

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");

您可以在上阅读更多关于可能的
格式
参数的信息。

我已经写了一个答案,解释了为什么会发生这种情况。无法过帐,因为Q已关闭。无论如何:@underflow-希望这对你有帮助。你们能接受封闭式重复问题的答案吗?哦,正如我所看到的——你们能:)是的,我能,我不能马上回答,因为我必须等一段时间。现在,我们来了解一下为什么DateTime会比原始日期缩短数小时—您不应该依赖
$converted
值。尝试构造您的
DateTime
对象,然后使用
modify()
方法,该方法可以将日期增加
+1年
<?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 -
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");