如何将 var_dump 的输出转换为数组或变量?
How to convert output of var_dump to array or variable?
我正在尝试计算两个时间的差值。我为此使用了 diff 函数,现在我想将 var_dump 的输出传输到数组或变量,以便我能够打印剩余时间。我的代码写在下面。 如何将以下输出检索到数组或变量?
$val1 = '2014-03-18 10:34:09';
$var2 = date("Y-m-d H:i:s");
$datetime1 = new DateTime($val1);
$datetime2 = new DateTime($val2);
var_dump($datetime1->diff($datetime2));
我的输出如下所示
object(DateInterval)#3 (8) {
["y"]=>
int(0)
["m"]=>
int(11)
["d"]=>
int(1)
["h"]=>
int(6)
["i"]=>
int(17)
["s"]=>
int(23)
["invert"]=>
int(0)
["days"]=>
int(338)
}
简单地说,你必须在它后面写 return 数组。
$data = $datetime1->diff($datetime2); //Return Object
$data = (array) $datetime1->diff($datetime2); //Return Array
对象输出
$data->y = 0 //year
$data->m = 11 //month
$data->d = 1 //day
$data->h = 1 //hour
$data->i = 8 //minute
$data->s = 33 //second
数组输出
$data['y'] = 0 //year
$data['m'] = 11 //month
$data['d'] = 1 //day
$data['h'] = 1 //hour
$data['i'] = 8 //minute
$data['s'] = 33 //second
在我看来你仍然需要操作这个变量,所以我建议你将 return 值赋给一个变量,而不是试图从 var_dump 中获取字符串值.
$diff = $datetime1->diff($datetime2)
- as per @panther.
如果您的目标是捕获字符串输出,那么您可以使用 $valueInString = print_r($diff, true);
,尽管它的输出与 var_dump 略有不同。
P.S。我想你拼错了 $var2
应该是 $val2
您使用函数 date()
格式化当前时间,然后将结果传递给 class DateTime
的构造函数,后者将日期解析为组件,只是为了取回当前时间戳。
没必要让它做这么辛苦的工作。如果您需要一个包含当前日期和时间的 DateTime
对象,您需要做的就是创建一个 DateTime
的新实例并且不向其 constructor 传递任何参数:
$datetime2 = new DateTime();
现在,关于两个日期之间的差异。使用 DateTime::diff()
确实是正确的方法,但是使用 var_dump()
没有帮助并且不需要将其转换为数组(或其他奇怪的东西)。
DateTime::diff()
返回的值是一个 DateInterval
. It provides public access to its properties and it also provides you the method DateInterval::format()
类型的对象,这是从它封装的值中生成可读字符串的好方法。
$val1 = '2014-03-18 10:34:09';
$datetime1 = new DateTime($val1);
$datetime2 = new DateTime('now');
$diff = $datetime1->diff($datetime2);
echo("It's been ".$diff->days.' days since '.$val1.".\n");
echo($diff->format("%a days, %h hours, %i minutes and %s seconds to be more precise.\n"));
我正在尝试计算两个时间的差值。我为此使用了 diff 函数,现在我想将 var_dump 的输出传输到数组或变量,以便我能够打印剩余时间。我的代码写在下面。 如何将以下输出检索到数组或变量?
$val1 = '2014-03-18 10:34:09';
$var2 = date("Y-m-d H:i:s");
$datetime1 = new DateTime($val1);
$datetime2 = new DateTime($val2);
var_dump($datetime1->diff($datetime2));
我的输出如下所示
object(DateInterval)#3 (8) {
["y"]=>
int(0)
["m"]=>
int(11)
["d"]=>
int(1)
["h"]=>
int(6)
["i"]=>
int(17)
["s"]=>
int(23)
["invert"]=>
int(0)
["days"]=>
int(338)
}
简单地说,你必须在它后面写 return 数组。
$data = $datetime1->diff($datetime2); //Return Object
$data = (array) $datetime1->diff($datetime2); //Return Array
对象输出
$data->y = 0 //year
$data->m = 11 //month
$data->d = 1 //day
$data->h = 1 //hour
$data->i = 8 //minute
$data->s = 33 //second
数组输出
$data['y'] = 0 //year
$data['m'] = 11 //month
$data['d'] = 1 //day
$data['h'] = 1 //hour
$data['i'] = 8 //minute
$data['s'] = 33 //second
在我看来你仍然需要操作这个变量,所以我建议你将 return 值赋给一个变量,而不是试图从 var_dump 中获取字符串值.
$diff = $datetime1->diff($datetime2)
- as per @panther.
如果您的目标是捕获字符串输出,那么您可以使用 $valueInString = print_r($diff, true);
,尽管它的输出与 var_dump 略有不同。
P.S。我想你拼错了 $var2
应该是 $val2
您使用函数 date()
格式化当前时间,然后将结果传递给 class DateTime
的构造函数,后者将日期解析为组件,只是为了取回当前时间戳。
没必要让它做这么辛苦的工作。如果您需要一个包含当前日期和时间的 DateTime
对象,您需要做的就是创建一个 DateTime
的新实例并且不向其 constructor 传递任何参数:
$datetime2 = new DateTime();
现在,关于两个日期之间的差异。使用 DateTime::diff()
确实是正确的方法,但是使用 var_dump()
没有帮助并且不需要将其转换为数组(或其他奇怪的东西)。
DateTime::diff()
返回的值是一个 DateInterval
. It provides public access to its properties and it also provides you the method DateInterval::format()
类型的对象,这是从它封装的值中生成可读字符串的好方法。
$val1 = '2014-03-18 10:34:09';
$datetime1 = new DateTime($val1);
$datetime2 = new DateTime('now');
$diff = $datetime1->diff($datetime2);
echo("It's been ".$diff->days.' days since '.$val1.".\n");
echo($diff->format("%a days, %h hours, %i minutes and %s seconds to be more precise.\n"));