2009-12-21 204 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年,y月,z天」等)。 – 2009-12-21 14:32:01

+0

我想在「天」:) – mysqllearner 2009-12-21 14:39:26

回答

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除以得到需要考慮的天數(所以最好使用日期差異函數)。 – memical 2013-03-29 11:07:10

+2

如果您使用的是現代版本的php,請使用adam的解決方案。 PHP有很多代碼來解決與時間有關的異常情況。 – txyoji 2014-09-22 19:12:24

161

我建議使用日期 - > DIFF功能,如實施例中所示:

$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 2012-10-02 22:45:11

+13

所述使用'$ diffInDays =(int)$ dDiff-> format(「%r%a」);'獲取可以直接使用的值,例如「-2」或「2」(格式參數描述請參見http://www.php.net/manual/en/dateinterval.format.php) – flu 2012-10-29 13:36:08

+0

如果您不小心或未嘗試將日期與「 - 」更改爲「:」 time ... – 2013-05-26 16:57:14

13

下面代碼將給出通過在兩個日期之間取出差異 ..

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

當試圖計算我的'JQuery datepicker'的日期差異時,'floor'給了我奇怪的結果。例如,'floor((stsetup(())和strtotime($ _ POST ['date']))?$ _POST ['date']:date(「Ymd」))) - strtotime(date(「Ymd」)))/ 3600/24)'給我在3月31日和3月21日之間的9.9583333333333的差異(所以當我期待10時,9倒數)。我用'round'函數來解決問題。 – 2016-03-21 18:44:37

+0

是喬納森, 你是對的。 – 2016-09-13 08:07:58