Я пытаюсь принять разницу в два раза. Я использовал функцию 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)
}
Просто вы должны написать следующее, он вернет массив.
$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
Вы используете функцию 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"));
Мне кажется, что вам все еще нужно манипулировать этой переменной, поэтому я бы посоветовал вам присвоить возвращаемое значение переменной вместо того, чтобы пытаться получить строковое значение из var_dump.
$diff = $datetime1->diff($datetime2)
— согласно @panther.
Если ваша цель — захватить строку вывода, то вы можете использовать $valueInString = print_r($diff, true);
хотя его вывод немного отличается от var_dump.
Постскриптум Я думаю, что вы ошиблись $var2
так, как это должно быть $val2