2009-12-21 1 views
77

Есть ли быстрый способ рассчитать разницу дат в php? Например:Дата Разница в PHP по дням?

$date1 = '2009-11-12 12:09:08'; 
$date2 = '2009-12-01 08:20:11'; 

А затем сделать расчет, $ date2 минус $ date1

Я прочитал PHP.net документации, но не повезло. Есть ли быстрый способ сделать это?

+0

@kiamlaluno - это не точный * дубликат, так как это намного сложнее (OP в этом вопросе хочет, чтобы дата была отформатирована как «x years, y months, z days» и т. Д.). –

+0

Я хочу в «дни» :) – mysqllearner

ответ

43

strtotime преобразует вашу строку даты в штамп времени unix. . (секунд с эпохи Unix

$ts1 = strtotime($date1); 
$ts2 = strtotime($date2); 

$seconds_diff = $ts2 - $ts1; 
+11

Обратите внимание, что это может дать вам разные результаты, если между двумя датами происходит смена времени (например, весной или осенью). Пробуйте следующее: echo strtotime ('2013-03-30 21:00') - strtotime ('2013-03-29 21:00'); echo strtotime ('2013-03-31 21:00') - strtotime ('2013-03-30 21:00'); вы получаете 86400 и 82800. Результаты на самом деле верны. но если вы разделите его на 86400, чтобы получить количество дней, которое вам нужно учитывать, то лучше использовать функцию date diff. – memical

+2

Если вы используете современную версию php, используйте решение adam. PHP имеет много кода для учета аномалий, связанных со временем. – txyoji

161

Я бы рекомендовал использовать Дата-> дифф функции, как в примере ниже:

$dStart = new DateTime('2012-07-26'); 
    $dEnd = new DateTime('2012-08-26'); 
    $dDiff = $dStart->diff($dEnd); 
    echo $dDiff->format('%R'); // use for point out relation: smaller/greater 
    echo $dDiff->days; 

см http://www.php.net/manual/en/datetime.diff.php

+2

Эта функция требует php 5.3 или лучше, как указано в @txyoji – levhita

+13

использовать '$ diffInDays = (int) формат $ dDiff-> ("% r% a ");' для получения значений, которые вы можете использовать напрямую, например, "-2" или «2» (см. http://www.php.net/manual/en/dateinterval.format.php для описания параметров формата) – flu

+0

И измените «-» на «:», если вы случайно или не пытаетесь поставить дату с time ... –

13

Ниже код даст выход за количество дней, выставив разницу между двумя датами ..

$str = "Jul 02 2013"; 
$str = strtotime(date("M d Y ")) - (strtotime($str)); 
echo floor($str/3600/24); 
+0

При попытке рассчитать разницу дат для моего 'JQuery datepicker',' floor' давал мне странный результат. Например: 'floor ((strtotime ((isset ($ _ POST ['date']) и strtotime ($ _ POST ['date']))? $ _POST ['date']: date (" Ymd "))) - strtotime (date («Ymd»)))/3600/24)) «Дайте мне разницу в 9.9583333333333 между 31 марта и 21 марта (так что 9 с округлением вниз, когда я ожидаю 10). Я использовал функцию «round» для решения проблемы. –

+0

Да Джонатан, Вы правы. –

 Смежные вопросы

  • Нет связанных вопросов^_^