我有以下代码:
$dStart = new DateTime('2013-03-15');
$dEnd = new DateTime('2013-04-01');
$dDiff = $dStart->diff($dEnd);
echo $dDiff->days;
我不知道为什么我得到6015作为结果。
答案 0 :(得分: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));
答案 1 :(得分: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
答案 2 :(得分:1)
使用此
$datetime1 = date_create('2013-03-15');
$datetime2 = date_create('2013-04-01');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days');
答案 3 :(得分:1)
我更喜欢这样的东西:
function days_diff($first_date, $second_date)
{
$later = new DateTime($second_date);
$then = new DateTime($first_date);
return $later->diff($then)->format('a');
}
答案 4 :(得分: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保持不变这是其他人所犯的错误。好吧,我无法理解它获得这个价值的地方。再次,根据http://www.php.net/manual/en/class.dateinterval.php DateInterval
的PHP手册,我尝试将它们作为对象的属性进行访问,并且事情变得非常好。
因此,我得到了确切的结果:
echo (string) $interval->d." days ago";