2013-04-01 144 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」我希望得到兩天之間的天數差異 – carlosduarte

+1

嘗試編輯.. ?? plz – Gautam3164

+0

明白了.. @ carlosduarte .. ?? – Gautam3164

3

試試這個 -

$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版本bug – 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個月,這將不起作用。目前,你必須使用'$ interval-> format('a')'來獲得兩天之間的總天數(如果你期望範圍永遠超過1個月) –

+0

@ColinMorelli謝謝!我已應用編輯。我使用這個功能沒有問題,但我的情況總是在一個月內。 –

0

我得到了PHP 5.3.0同一6015天發現該解決方案使用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處保持不變,這就是其他人正在獲得的錯誤。那麼,我不明白它在哪裏得到這個價值。再次,按照DateInterval的PHP手冊http://www.php.net/manual/en/class.dateinterval.php,我嘗試將它們作爲對象的屬性進行訪問,事情變得非常好。

因此,我通過得到確切的結果:

echo (string) $interval->d." days ago";