Как рассчитать разницу между двумя датами?
Какой самый удобный способ узнать разницу во времени между двумя датами в формате по умолчанию используется MySQL (YYYY-MM-DD")? Ex:
Дата 1: 2013-12-11
Дата 2: 1994-04-17
5 answers
Один из способов сделать это объектно-ориентированным, это с помощью класса DateTime, же есть метод diff, который возвращает объект DateInterval, который представляет собой интервал между двумя датами различны:
Следуя примеру дат:
$data1 = new DateTime( '2013-12-11' );
$data2 = new DateTime( '1994-04-17' );
$intervalo = $data1->diff( $data2 );
echo "Intervalo é de {$intervalo->y} anos, {$intervalo->m} meses e {$intervalo->d} dias";
Вы также можете использовать функции MySQL DATEDIFF (en), который является простым, смотрите примеры:
SELECT DATEDIFF('2013-01-01','2012-03-01')
В приведенном выше случае, я провел две даты "вручную", могут быть два поля:
Представьте, что есть таблица с полями data_registro
и ultimo_acesso
, если хотите, чтобы показать пользователю количество дней между кадастра и последнего доступа, вы можете использовать:
SELECT DATEDIFF(ultimo_acesso, data_registro)
, Если вам нужно вычислить разницу между data и любой текущей дате, вы можете использовать функцию NOW() (en) MySQL:
SELECT DATEDIFF( NOW(), ultimo_acesso)
Решение доступно с версии 5.3+ PHP:
$date = new DateTime('2012-12-25 12:00:00');
$date2 = new DateTime('2013-12-25 12:00:00');
var_dump($date->diff($date2));
Выход:
object(DateInterval)[3]
public 'y' => int 1
public 'm' => int 0
public 'd' => int 0
public 'h' => int 0
public 'i' => int 0
public 's' => int 0
public 'weekday' => int 0
public 'weekday_behavior' => int 0
public 'first_last_day_of' => int 0
public 'invert' => int 0
public 'days' => int 365
public 'special_type' => int 0
public 'special_amount' => int 0
public 'have_weekday_relative' => int 0
public 'have_special_relative' => int 0
Я с помощью php 5.5.7 здесь, так что этот выход может быть меньше полей, если версия меньше.
return date_diff(date_create($data_fim), date_create($data_ini))->format('%d');//days
$resultado = strtotime($data_inicial.' + '.$data_final);