PHP日期差异

时间:2013-04-01 12:54:11

标签: php date diff

我有以下代码:

$dStart = new DateTime('2013-03-15');
$dEnd = new DateTime('2013-04-01');
$dDiff = $dStart->diff($dEnd);
echo $dDiff->days;

我不知道为什么我得到6015作为结果。

5 个答案:

答案 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";