2013-04-01 2 views
7

я имею следующий код:PHP разница Дата

$dStart = new DateTime('2013-03-15'); 
$dEnd = new DateTime('2013-04-01'); 
$dDiff = $dStart->diff($dEnd); 
echo $dDiff->days; 

Я не знаю, почему я получаю 6015, как результат.

+0

Что произойдет, если смещение даты по одному? Например, «2013-03-16» и «2013-04-02». – cwallenpoole

+0

Если я установил 2013-03-16 и 2013-04-02, я получаю то же значение 6015 – carlosduarte

+2

Я нашел сообщение об ошибке № 51184 https://bugs.php.net/bug.php?id=51184 – carlosduarte

ответ

4

Попробуйте как

$dStart = strtotime('2013-03-15'); 
$dEnd = strtotime('2013-04-01'); 
$dDiff = $dEnd - $dStart; 
echo date('H:i:s',$dDiff); 

или в соответствии с вашим кодом попробовать с

$dDiff = $dStart->diff($dEnd); 
$date->format('d',$dDiff); 
echo $dDiff->days; 

если вы хотите разница в днях попробовать с этим также

echo floor($dDiff/(60*60*24)); 
+0

То, что возвращается «01:01:00», я ожидаю получить разницу в днях между 2 датами – carlosduarte

+1

попробуйте отредактировать .. ?? plz – Gautam3164

+0

Получил это .. @ carlosduarte .. ?? – Gautam3164

3

Попробуйте this-

$dStart = new DateTime('2013-03-15'); 
$dEnd = new DateTime('2013-04-01'); 
$dDiff = $dStart->diff($dEnd); 
echo $dDiff->format('%d days') 

Проверить PHP

Пожалуйста, проверьте demo link

+0

Он возвращает +6015 дней. Также он должен быть ошибкой версии PHP – carlosduarte

+0

@carlosduarte: обновленная публикация и добавленная ссылка для phpfiddle: http://phpfiddle.org/main/code/7dq-mb7 –

+0

В этом примере вы добавляете любую дату ...Скажем, смените его на 2015 год, он возвращается 17 дней всегда – utkarshk

1

использование этого

$datetime1 = date_create('2013-03-15'); 
$datetime2 = date_create('2013-04-01'); 
$interval = date_diff($datetime1, $datetime2); 
echo $interval->format('%R%a days'); 
+0

Он возвращает +6015 дней может быть ошибкой php? Версия PHP 5.3.1 – carlosduarte

+0

может быть причиной ошибки для вашей версии php. Я тестировал и возвращал +17 дней. –

+0

Я не могу понять, что происходит с PHP, если я эхо (1363305600 - 1364857200)/(60 * 60 * 24) он возвращает -A.9583333333333 – carlosduarte

1

Я предпочитаю что-то вроде:

function days_diff($first_date, $second_date) 
{ 
    $later = new DateTime($second_date); 
    $then = new DateTime($first_date); 
    return $later->diff($then)->format('a'); 
} 
+0

Да, это единственное решение, которое работает на PHP версии 5.3.1 – carlosduarte

+1

Это не сработает, если разница составляет более 1 месяца. DateInterval перевернется и увеличит 'm', сбросив' d' обратно на 0. В настоящее время вы _must_ используете '$ interval-> format ('a')', чтобы получить общее количество дней между двумя днями (если вы ожидаете диапазон когда-либо выше 1 месяца) –

+0

@ColinMorelli Спасибо! Я применил редактирование. Я использовал эту функцию без проблем, но мое дело всегда было в течение месяца. –

0

я получил те же 6015 дней на PHP 5.3.0 и нашел решение с использованием var_dump(). Мой точный код здесь:

$timestring = "Thu, 13 Jun 2013 14:05:59 GMT"; 
date_default_timezone_set('GMT'); 
$date = DateTime::createFromFormat('D, d M Y G:i:s T', $timeString); 
$nowdate = new DateTime("now"); 
$interval = $date->diff($nowdate); 

Теперь, если я делаю var_dump($interval), результат:

object(DateInterval)#5 (8) { 
    ["y"]=> 
    int(0) 
    ["m"]=> 
    int(0) 
    ["d"]=> 
    int(0) 
    ["h"]=> 
    int(19) 
    ["i"]=> 
    int(45) 
    ["s"]=> 
    int(33) 
    ["invert"]=> 
    int(0) 
    ["days"]=> 
    int(6015) 
} 

Так часы (h), минуты (i) и секунды (s) установлены правильно, но есть еще одно свойство days, которое остается постоянным на 6015, и это то, что другие получают как ошибку. Ну, я не могу понять, где он получает эту ценность. Опять же, согласно руководству PHP для DateInterval по адресу http://www.php.net/manual/en/class.dateinterval.php, я попытался получить к ним доступ к свойствам объекта, и все прошло отлично.

Таким образом, я получаю точный результат по:

echo (string) $interval->d." days ago"; 
Смежные вопросы