Как преобразовать вывод var_dump в массив или переменную?

Я пытаюсь принять разницу в два раза. Я использовал функцию 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)

}

2

Решение

Просто вы должны написать следующее, он вернет массив.

$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

демонстрация

2

Другие решения

Вы используете функцию date() отформатировать текущее время, а затем передать результат в конструктор класса DateTime который анализирует дату для компонентов, чтобы получить текущую метку времени.

Нет необходимости заставлять его делать эту тяжелую работу. Если вам нужно DateTime объект, который содержит текущую дату & время все, что вам нужно сделать, это создать новый экземпляр DateTime и не передавать никаких параметров для его конструктор:

$datetime2 = new DateTime();

Теперь о разнице между двумя датами. С помощью DateTime::diff() действительно правильный способ сделать это, но используя var_dump() не помогает и преобразование его в массив (или другие странные вещи) не требуется.

Значение, возвращаемое DateTime::diff() является объектом типа DateInterval. Он предоставляет публичный доступ к своим свойствам, а также предоставляет вам метод 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"));
1

Мне кажется, что вам все еще нужно манипулировать этой переменной, поэтому я бы посоветовал вам присвоить возвращаемое значение переменной вместо того, чтобы пытаться получить строковое значение из var_dump.

$diff = $datetime1->diff($datetime2) — согласно @panther.

Если ваша цель — захватить строку вывода, то вы можете использовать $valueInString = print_r($diff, true); хотя его вывод немного отличается от var_dump.

Постскриптум Я думаю, что вы ошиблись $var2 так, как это должно быть $val2

0
По вопросам рекламы [email protected]