如果我有两个变量$startDate="YYYYmmdd"
和$endDate="YYYYmmdd"
,我怎样才能得到它们之间的天数?
谢谢。
答案 0 :(得分:6)
如果您使用的是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
答案 1 :(得分:2)
$DayDiff = strtotime("2010-01-12")-strtotime("2009-12-30");
echo date('z', $DayDiff)." Days";
这个应该是精确的并可用于PHP< 5.2
答案 2 :(得分:2)
<?php
$time1=strtotime($startDate);
$time2=strtotime($endDate);
$daycount=floor(($time2-$time1)/ 86400);
?>
答案 3 :(得分:2)
<?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);
?>
答案 4 :(得分:1)
以下是示例代码
$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";
答案 5 :(得分:1)
我发现获取它们之间天数的最简单方法是将开始和结束日期转换为Unix时间戳并对它们进行减法。
然后,如果要格式化日期,请使用PHP日期函数将其转换回来。
答案 6 :(得分:1)
这是我的方法,基于大多数情况下的残酷搜索,仅仅因为按秒(数周,数月,数年)的划分可能无法返回精确的结果,例如与闰年合作时。
<?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>" ;
&GT;