2010-09-06 142 views
14

如果我有一些字符串$ startDate和$ endDate設置爲(例如)「2011/07/01」和「2011/07/17」(意思是2011年7月1日和2011年7月17日)。我如何計算從開始日期到結束日期的日期?在給出的例子中,這將是17天。如何計算PHP中兩個日期之間的天數?

+0

看到http://stackoverflow.com/questions/2040560 /發現這兩天之間的天數 – 2016-01-04 20:16:12

回答

34

這裏是原始的方式來做到這一點

$startTimeStamp = strtotime("2011/07/01"); 
$endTimeStamp = strtotime("2011/07/17"); 

$timeDiff = abs($endTimeStamp - $startTimeStamp); 

$numberDays = $timeDiff/86400; // 86400 seconds in one day 

// and you might want to convert to integer 
$numberDays = intval($numberDays); 
+4

當您有本地日期包括白天保存時間切換時,將無法正常工作,因爲在這些日期您有23或25小時的日子。 – 2010-09-06 19:53:52

+0

謝謝。似乎爲我工作。 – cannyboy 2010-09-06 21:53:02

+0

其實,它說16日這些日期..我需要讓日期忽略夏令時..? – cannyboy 2010-09-06 22:43:20

3

PHP有一個date_diff()函數來做到這一點。

30

Use DateTime::diff(又名date_diff):

$datetime1 = new DateTime('2009-10-11'); 
$datetime2 = new DateTime('2009-10-13'); 
$interval = $datetime1->diff($datetime2); 

或者:

$datetime1 = date_create('2009-10-11'); 
$datetime2 = date_create('2009-10-13'); 
$interval = date_diff($datetime1, $datetime2); 

然後,您可以通過調用$interval->days得到的間隔爲整數。

+0

這似乎不適用於我最初的字符串「2011/07/01」和「2011/07/17」...「打電話給未定義的函數date_diff()..「。我使用PHP 5.2.10 – cannyboy 2010-09-06 21:40:21

+4

根據文檔(鏈接在頂部),這是PHP> = 5.3.0。下次,請在您的問題中包含PHP版本。 – wuputah 2010-09-06 23:13:02

+0

只有在您的日期時間沒有時間時纔有效,否則它可能會返回1-2天到幾個 – Dukeatcoding 2014-01-22 14:09:06

1

無解的工作對我來說。對於那些誰仍然在PHP 5.2(日期時間:: DIFF在5.3推出),該解決方案的工作原理:

function howDays($from, $to) { 
    $first_date = strtotime($from); 
    $second_date = strtotime($to); 
    $offset = $second_date-$first_date; 
    return floor($offset/60/60/24); 
} 
3

如果你的日期時間也已小時:分鐘:秒,你還是希望有天數..

/** 
    * Returns the total number of days between to DateTimes, 
    * if it is within the same year 
    * @param $start 
    * @param $end 
    */ 
    public function dateTimesToDays($start,$end){ 
     return intval($end->format('z')) - intval($start->format('z')) + 1; 
    } 

https://github.com/dukeatcoding/timespan-converter

0

如果你想知道的天數(如果有的話)的秒數,小時(如果有的話)的數量,minutues(如果有的話),並可以執行以下操作:

$previousTimeStamp = strtotime("2011/07/01 21:12:34"); 
$lastTimeStamp = strtotime("2013/09/17 12:34:11"); 

$menos=$lastTimeStamp-$previousTimeStamp; 

$mins=$menos/60; 
if($mins<1){ 
$showing= $menos . " seconds ago"; 
} 
else{ 
$minsfinal=floor($mins); 
$secondsfinal=$menos-($minsfinal*60); 
$hours=$minsfinal/60; 
if($hours<1){ 
$showing= $minsfinal . " minutes and " . $secondsfinal. " seconds ago"; 

} 
else{ 
$hoursfinal=floor($hours); 
$minssuperfinal=$minsfinal-($hoursfinal*60); 
$days=$hoursfinal/24; 
if($days<1){ 
$showing= $hoursfinal . "hours, " . $minssuperfinal . " minutes and " . $secondsfinal. " seconds ago"; 

} 
else{ 
$daysfinal=floor($days); 
$hourssuperfinal=$hoursfinal-($daysfinal*24); 
$showing= $daysfinal. "days, " .$hourssuperfinal . " hours, " . $minssuperfinal . " minutes and " . $secondsfinal. " seconds ago"; 
}}} 

echo $showing; 

您可以使用相同的邏輯如果你想增加幾個月和幾年。

0

簡單的方法來計算的,

$currentdate = date('Y-m-d H:i:s'); 
$after1yrdate = date("Y-m-d H:i:s", strtotime("+1 year", strtotime($data))); 

$diff = (strtotime($after1yrdate) - strtotime($currentdate))/(60 * 60 * 24); 

echo "<p style='color:red'>The difference is ".round($diff)." Days</p>"; 
-1

您可以使用date_diff計算兩個日期之間的差值:

$date1 = date_create("2013-03-15"); 
$date2 = date_create("2013-12-12"); 
$diff = date_diff($date1 , $date2); 
echo $diff->format("%R%a days"); 
0
$date1 = date_create("2017-04-15"); 
$date2 = date_create("2017-05-18"); 

//difference between two dates 
$diff = date_diff($date1,$date2); 

//count days 
echo 'Days Count - '.$diff->format("%a");