Часто программисты при выводе времени прибавляют некоторое количество времени. Как прибавить отрезок времени к дате PHP? Существует 2 способа. Первый способ - это разбиение строки по символу и превращение всех элементов массива в количество секунд. Второй способ заключается в превращении строки в объект времени. Второй способ сложнее и интереснее. Его и рассмотрим!
$d = '13.12.2015 11:05:44';
$newdate = date('d.m.Y H:i:s', strtotime($d." + 30 minutes"));
// создаёт 2 объекта
$dateStart = new DateTime($d);
$dateEnd = new DateTime($newdate);
// echo $newdate;
// тут происходит вычитание двух дат
$i = date_diff($dateStart, $dateEnd);
$interval = (int)$i->format('%i'); //минуты
if($interval >= 30) echo 'old date';
// посмотрите на весь объект
var_dump($interval);
У нас есть строка $d со временем. При помощи функции time() мы получим время в unix-формате. Еще прибавим 30 минут к нашей дате. Далее создаём 2 объекта при помощи конструктора new DateTime(). Эти объекты можно просмотреть при помощи функции var_dump(). Благодаря функции date_diff() получим разницу дат. Эта разница представляет из себя объект. Благодаря функции format() вы можете вывести дату в любом формате. Это очень удобно.
Хочу показать самописную функцию getStartDate() для сравнения двух дат. Логика внутри функции простая. В функции мало строк. Вам нужно передать функции 2 входных параметра (две даты). Если первое значение меньше второго, то выводится true. Если значение равны, то выводится NULL. Если первое значение больше второго, то выводится false.
/*
getStartDate()
сравнение двух дат. возвращает: TRUE, FALSE, NULL
*/
function getStartDate($d1, $d2)
{
$data1 = new DateTime($d1);
$data2 = new DateTime($d2);
if($data1 < $data2) $res = TRUE;
elseif($data1 == $data2) $res = NULL;
else $res = FALSE;
return $res;
}
// если первое значение < второго, то выводится true
$res = getStartDate('01.01.2015', '01.01.2016');
var_dump($res);
// вывод: bool(true)
Допустим, у вас задача вывести разницу сразу в днях, часах и минутах. Если не использовать ООП функции DateTime(), то будет много писанины. Вам нужно лишь расставить маркеры: format('день: %a час: %h мин: %i').
function getDateDiff($d)
{
$datetime2 = new DateTime();
$datetime1 = DateTime::createFromFormat('d.m.Y H:i:s', $d);
$interval = $datetime1->diff($datetime2);
$param = $interval->format('день: %a час: %h мин: %i');
return $param;
}
echo getDateDiff('08.11.2016 10:14:53');
// вывод: день: 85 час: 23 мин: 18
Хочу показать вам как сравнить две даты по параметру. Читайте статью как сравнить две даты по параметру PHP.