8

我有以下代码:

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

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

4

5 回答 5

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));
于 2013-04-01T12:56:00.343 回答
3

尝试这个-

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

检查PHP

请查看演示链接

于 2013-04-01T12:56:29.597 回答
1

用这个

 $datetime1 = date_create('2013-03-15');
 $datetime2 = date_create('2013-04-01');
 $interval = date_diff($datetime1, $datetime2);
 echo $interval->format('%R%a days');
于 2013-04-01T12:57:35.327 回答
1

我更喜欢这样的东西:

function days_diff($first_date, $second_date)
{
    $later = new DateTime($second_date);
    $then = new DateTime($first_date);
    return $later->diff($then)->format('a');
}
于 2013-04-01T13:01:02.587 回答
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);

现在如果我做 a 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,这是其他人得到的错误。好吧,我不明白它从哪里得到这个值。DateInterval同样,根据http://www.php.net/manual/en/class.dateinterval.php上的 PHP 手册,我尝试将它们作为对象的属性进行访问,一切都很好。

因此,我得到了准确的结果:

echo (string) $interval->d." days ago";
于 2013-06-14T04:22:32.967 回答