Вычитание двух дат в php

У меня есть две даты в php

$date1 = 'May 3, 2012 10:38:22 GMT'

$date2 = '06 Apr 2012 07:22:21 GMT'

Тогда я вычитаю обе из них

$date2 - $date1

и получим

Result:6

Почему результат 6, а не 27?...? Как я могу вычесть две даты и вернуть мне результат, основанный на различиях по месяцам, вычитая годы и дни и время?

Ответы

Ответ 1

Часть 1: Почему результат 6?

Даты - это просто строки, когда вы сначала их вычитаете. PHP пытается преобразовать их в целые числа. Он делает это путем преобразования до первого не номера. Итак, date2 становится 6, а date1 становится 0.

Часть 2: Как вы его заработаете?

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');

$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;

Преобразуйте, если необходимо.

Ответ 2

Существует один способ использования mktime n сделать дату в метке времени, а затем вычесть, а затем использовать функцию даты, чтобы показать в том, как вы хотите....

Другим способом является формат обоих дат в том же формате, что и вычесть....

Третий путь

$date1=  new DateTime("May 3, 2012 10:38:22 GMT");
$date2= new DateTime("06 Apr 2012 07:22:21 GMT");
echo $date1->diff($date2)->("%d");

вперед

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');
$secs = $datetime2 - $datetime1;// == return sec in difference
$days = $secs / 86400;

Ответ 3

Используя DateTime и DataInterval,

$date1=  new DateTime("May 3, 2012 10:38:22 GMT");
$date2= new DateTime("06 Apr 2012 07:22:21 GMT");
echo $date1->diff($date2)->format("%d");

Ответ 4

$todate= strtotime('May 3, 2012 10:38:22 GMT');
$fromdate= strtotime('06 Apr 2012 07:22:21 GMT');
$calculate_seconds = $todate- $fromdate; // Number of seconds between the two dates
$days = floor($calculate_seconds / (24 * 60 * 60 )); // convert to days
echo($days);

Этот код найдет разницу дат между двумя датами.

Здесь вывод равен 27

Ответ 5

Большинство представленных решений, похоже, работают, но каждый забывает об одном: время.

Пример evan:

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');

$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;

Если вы не урезаете временную часть, то что может привести к перепланированию. Например: Интервал между 2014-05-01 14:00:00 (Y-m-d) и 2014-05-02 07:00:00 будет 0, xxx, а не 1. Вы должны урезать временную часть каждой даты.

Итак, это должно быть:

$datetime1 = strtotime(date('Y-m-d', strtotime('May 3, 2012 10:38:22 GMT')));
$datetime2 = strtotime(date('Y-m-d', strtotime('06 Apr 2012 07:22:21 GMT')));

$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;

Ответ 6

echo 'time'.$notification_time=  "2008-12-13 10:42:00";
 date_default_timezone_set('Asia/Kolkata');
 echo 'cureen'.$currenttime=date('Y-m-d H:i:s'); 
$now = new DateTime("$notification_time");
$ref = new DateTime("$currenttime");
$diff = $now->diff($ref);
printf('%d days, %d hours, %d minutes', $diff->d, $diff->h, $diff->i);

Ответ 7

Если вы хотите использовать метод diff (он возвращает объект Dateinterval), правильным способом является форматирование с помощью% a. Я имею в виду:

Если вы проверите http://php.net/manual/en/dateinterval.format.php

Правильный способ:

 echo $date1->diff($date2)->format("%a");

Для получения всех дней