training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Разница сравнение времени PHP

Создано: 26 декабря 2015Автор: Егор Астапов3845 просмотровСложность: легкий

Часто программисты при выводе времени прибавляют некоторое количество времени. Как прибавить отрезок времени к дате 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.

Комментарии

реклама