2015-02-19 3 views
2

Я пытаюсь принять разницу в два раза. Я использовал функцию diff для этого, и теперь я хочу передать вывод var_dump в массив или переменную, чтобы я мог распечатать оставшееся время. Мой код написан ниже. Как получить нижний вывод в массив или переменную?Как преобразовать вывод 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) 

} 
+1

Как вы думаете, '' var_dump() 'делает? – Achrome

+1

Если вам нужно назначить diff array в переменную, просто выполните это: '$ diff = $ datetime1-> diff ($ datetime2)'. – panther

+0

['var_dump()'] (http://php.net/manual/en/function.var-dump.php) - это отладочная помощь. Он не должен использоваться в производственном коде. – axiac

ответ

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 

Demo

+0

Я хочу все это как массив –

+2

Вы можете использовать ответ 'second' в моем коде' $ data = (array) $ datetime1-> diff ($ datetime2); ' – Sadikhasan

+0

@LokeshBhandari. – Sadikhasan

0

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

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

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

P.S. Я думаю, что вы неправильно $var2, как это должно быть $val2

1

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

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

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