Как рассчитать разницу между двумя датами?


Какой самый удобный способ узнать разницу во времени между двумя датами в формате по умолчанию используется MySQL (YYYY-MM-DD")? Ex:

Дата 1: 2013-12-11
Дата 2: 1994-04-17

 52
Author: Bruno Augusto, 2013-12-11

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"; 
 64
Author: jonathancardoso, 2013-12-28 15:08:16

Вы также можете использовать функции 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)
 29
Author: hernandev, 2013-12-28 15:11:04

Решение доступно с версии 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 здесь, так что этот выход может быть меньше полей, если версия меньше.

 17
Author: renatoneto, 2013-12-28 15:13:09
return date_diff(date_create($data_fim), date_create($data_ini))->format('%d');//days
 16
Author: Andreus Timm, 2015-07-04 22:25:01
$resultado = strtotime($data_inicial.' + '.$data_final);
 -4
Author: Marcos Meira Soares, 2018-02-20 17:26:38