回答
如果使用PHP 5.3,則可以使用新的DateTime
類:
$startDate = new DateTime("20101013");
$endDate = new DateTime("20101225");
$interval = $startDate->diff($endDate);
echo $interval->days . " until Christmas"; // echos 73 days until Christmas
如果不是,您將需要使用strtotime
:
$startDate = strtotime("20101013");
$endDate = strtotime("20101225");
$interval = $endDate - $startDate;
$days = floor($interval/(60 * 60 * 24));
echo $days . " until Christmas"; // echos 73 days until Christmas
新的DateTime,DateTimeInterval,DateTimePeriod和DateTimeZone類只是搖滾。我也與他們取得了一些經驗。我認爲它比時間戳更好,因爲它考慮了閏年,跨越式等等。所以+1爲你。我也在這篇文章中給出了一個更詳細的例子:http://stackoverflow.com/questions/3108591/calculate-number-of-hours-between-2-dates-in-php/3108800#3108800 – 2010-10-13 08:40:06
謝謝你,寂寞天。 – Francisc 2010-10-13 09:56:51
$DayDiff = strtotime("2010-01-12")-strtotime("2009-12-30");
echo date('z', $DayDiff)." Days";
這一個應該是精確和可使用用PHP < 5.2
下面是示例代碼
$startDate = mktime(0,0,0,1,1,2010);
$endDate = mktime(0,0,0,12,1,2010);
$dateDiff = $date1 - $date2;
$fullDays = floor($dateDiff/(60*60*24));
echo "Differernce is $fullDays days";
<?php
$time1=strtotime($startDate);
$time2=strtotime($endDate);
$daycount=floor(($time2-$time1)/ 86400);
?>
<?php
function days($date1, $date2) {
$date1 = strtotime($date1);
$date2 = strtotime($date2);
return ($date2 - $date1)/(24 * 60 * 60);
}
$date1 = '20100820';
$date2 = '20100930';
echo days($date1, $date2);
?>
我發現讓他們之間的天數最簡單的方法是通過轉換開始和結束日期的Unix時間戳和對他們做一個減法。
然後,如果要格式化日期,請使用PHP日期函數將其轉換回來。
這是我的方法,基於在大多數情況下的殘酷搜索,僅僅因爲以秒爲單位(幾周,幾個月,幾年)的分割可能不會返回精確的結果,例如以閏年爲例。
<?php
function datediff($timeformat, $startdate, $enddate)
{
$unix_startdate = strtotime($startdate) ;
$unix_enddate = strtotime($enddate) ;
$min_date = min($unix_startdate, $unix_enddate);
$max_date = max($unix_startdate, $unix_enddate);
$Sd = date("d", $unix_startdate) ;
$Sm = date("m", $unix_startdate) ;
$Sy = date("Y", $unix_startdate) ;
$Ed = date("d", $unix_enddate) ;
$Em = date("m", $unix_enddate) ;
$Ey = date("Y", $unix_enddate) ;
$unixtimediff = $unix_enddate - $unix_startdate ;
if ($unixtimediff <= 0) return -1 ;
switch(strtolower($timeformat))
{
case "d": // days
$divisor = 3600 * 24 ;
return floor($unixtimediff/$divisor) + 1 ;
break ;
case "w": // weeks
$i = 0 ;
while (($min_date = strtotime("+1 DAY", $min_date)) <= $max_date) $i++;
return floor($i/7) ;
break ;
case "m": // months
$i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ;
while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) $i++;
return $i ;
break ;
case "q": // quaterly (3 months)
$i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ;
while (($min_date = strtotime("+3 MONTH", $min_date)) <= $max_date) $i++;
return $i ;
break ;
case "y": // year
$i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ;
while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) $i++;
return floor($i/12) ;
break ;
}
}
$startdate = "2014-01-01" ;
$enddate = "2015-12-31" ;
$formats = array("d" => "days", "w" => "weeks", "m" => "months", "q" => "quaterly", "y" => "years") ;
foreach($formats AS $K => $F)
echo "From $startdate to $enddate in $F format: ". datediff("$K", $startdate, $enddate)."<br>" ;
?>
- 1. MVC獲取日曆開始日期和結束日期之間的天數
- 2. 在開始日期到結束日期之間獲取數據
- 3. 生成開始日期和結束日期之間的日期
- 4. 如何獲取開始日期和結束日期之間的每週日期
- 5. php,根據開始日期和月數獲取結束日期
- 6. 檢查今天的日期開始日期和結束日期之間落在
- 7. 獲取PHP DatePeriod對象的開始日期和結束日期?
- 8. 指定開始日期和結束日期之間的計數天數
- 9. 獲取開始日期和結束日期之間的一個數組
- 10. 如何獲取日期時間月開始和結束日期?
- 11. 如何計算開始日期和結束日期之間的天數
- 12. MySQL,在開始和結束日期列之間獲取數據?
- 13. Rails 3.1 - 在開始和結束日期之間獲取結果?
- 14. 如何獲取給定開始日期和結束日期的中間日期?
- 15. 獲取本週的開始日期和結束日期(星期一從星期一開始,星期日結束)
- 16. 獲取SQL中兩個日期之間月份的開始和結束日期?
- 17. 如何計算天峽結束日期之間的和開始日期在SQL
- 18. 根據開始日期和天數查找結束日期 - excel
- 19. 基於天數得到開始日期和結束日期
- 20. 開始日期到結束日期之間的查找時間
- 21. 獲取指定日期之前的星期的開始和結束日期
- 22. 開始日期和結束日期datepicker
- 23. 開始日期和結束日期
- 24. 獲取開始日期和結束日期的簡單方法
- 25. 獲取某月份的開始日期和結束日期
- 26. 如何獲取本週的開始日期和結束日期?
- 27. 獲取重疊的開始日期和結束日期
- 28. MySQL:IN子句的開始日期和結束日期之間的日期?
- 29. sql顯示在開始日期和結束日期之間的日期
- 30. 在mysql中的開始日期和結束日期之間顯示日期
請註明,如果你想兩天包括在內或排除兩個日期的數量。 – stillstanding 2010-10-13 08:35:58
包括開始和結束,謝謝。 – Francisc 2010-10-13 08:44:40