2011-08-07 1 views
0

Я вижу, есть другие сообщения по этому вопросу на других языках, но я не могу найти их для PHP. Я не ищу разницу между двумя датами, но, скорее, сколько дней разные. Например:Как получить абсолютную разницу дат между двумя датами в PHP?

2011-08-06 14:05:28

и

2011-08-07 08:46:28

являются менее один день друг от друга, но я хочу функцию, которая будет сказать мне, что они в дни, которые в один день, то есть будет возвратите значение 1 за эти две даты и верните значение 2 на следующие даты, например:

2011-08-06 23:05:28

и

2011-08-08 01:46:28

Действительно, я предполагаю, что это должно быть легко, но я не много работал с датами раньше.

О, и еще одно ограничение, мне нужно что-то совместимое с PHP 5.2, поэтому не могу использовать DateTime::diff.

EDIT: изменил бы уточнить, что я на самом деле нужно числовое значение, возвращаемое, извините :)

+2

Возможно, дубликат http://stackoverflow.com/questions/676824/how-to-calculate-the-difference-between-two-dates-using-php – CuriousMind

+0

не уверен ... Мне не нужны месяцы или годы , просто количество дней, поэтому выбранный ответ (вместо 2 лет, 3 месяца, 2 дня, я хочу что-то вроде 795) – yuttadhammo

ответ

1

если я интерпретировать вопрос правильно, вам нужно GregorianToJD или MySQL to_days

Обе функции возвращают julian day на определенную дату, которая в основном количество дней, прошедших с «0 день».

+0

Да, 'to_days' выглядит хорошо ... Я не уверен в другом, мне непонятно, какое значение вернется ... – yuttadhammo

+0

Эй, если это работает, это звучит просто решение ... Я попробую и вернусь к вам. – yuttadhammo

+0

гений, чистый гений :) работал как шарм. – yuttadhammo

0
$date1 = "2011-08-06 14:05:28"; 
    $date2 = "2011-08-07 08:46:28"; 
    if(date("Ymd",strtotime($date1)) == date("Ymd",strtotime($date2)) { 
     // they match 

    } else { 
     // calculate the difference 
     $diff = ceil(abs(strtotime($date1)-strtotime($date2))/86400); 

    } 
+0

так же, как выше комментарий ... Мне бы очень хотелось получить номер ответа. – yuttadhammo

+0

Это вернет неправильный ответ за те же дни в другом месяце, то есть для '2011-08-15' и' 2011-09-15'. – ain

+0

обновил мой anwser – blejzz

0
  1. Преобразование даты в метки времени. Как это делается, зависит от формата входных данных.
  2. Формат временных меток с использованием функции date PHP (Ymd представляется подходящим $format).
  3. Сравните полученные строки для равенства.

Если вам нужна фактическая разница в днях, вызовите date отдельно с помощью Y, m и d как форматы, построить временные метки из результата (с использованием mktime) и разделить разницу между временными метками на 86400 (количество секунд в день).

1
$date1 = "2011-08-06 14:05:28"; 
$date2 = "2011-08-07 08:46:28"; 
if(date('Ymd', strtotime($date1)) == date('Ymd', strtotime($date2))) 
{ 
    // Same day! 
} 

Update

Если вы действительно хотите, количество дней между датами, чтобы я предлагаю вам обновить до PHP 5.3. Вычисление количества дней может быть довольно сложным, особенно если вы хотите иметь возможность обрабатывать дни в разные годы.

$days = abs(date('z', strtotime($date1)) - date('z', strtotime($date2))); 

Это лучшее, что я могу сделать, но это требует что $date1 и $date2 находятся в том же году.

0
$secondsApart = strtotime('2011-08-07 08:46:28') - 
        strtotime('2011-08-06 14:05:28'); 

Теперь вы можете вычислить любое другое значение, основанное на том, что:

$hoursApart = round($secondsApart/3600); 
$daysApart = round($secondsApart/86400); 
... 

Вы также можете использовать этаж() или CEIL() вместо раунд(), если это лучше подходит для ваших потребностей.

0

Я хотел бы попробовать что-то вроде этого (используя в основном временные метки):

/** 
* @param string $date1 
* @param string $date2 
* @return int 
* Number of days between the two dates. 
*/ 
function date_diff_days($date1, $date2) { 

    // Ignore the time part and convert the date part to timestamp. 
    $date1 = substr($date1, 0, 10); 
    $date1 = strtotime($date1 . ' 00:00:00'); 
    $date2 = substr($date2, 0, 10); 
    $date2 = strtotime($date2 . ' 00:00:00'); 

    // Compute the difference in seconds. 
    $diff_secs = abs($date1 - $date2); 

    // Convert the difference to days. 
    $diff_days = ceil($diff_secs/(60 * 60 * 24)); 

    return $diff_days; 

} 

Я попробовал его с обеих тестовых данных, и она работала так же, как вы хотели. Если вы хотите внести какие-либо изменения, вы можете отредактировать функцию. Надеюсь, поможет!