0
$time1 = time();
$time2 = mktime(date('H')+1, date('i'), date('s'), date('m'), date('d'), date('Y'));
$diff = $time2 - $time1
echo date('Y/m/d H:i:s', $time)."<br/>";
echo date('Y/m/d H:i:s', $new_time)."<br/>";
echo date('H', $diff);

输出:

2013/09/03 09:25:52
2013/09/03 10:25:52
02 //which should be 1

为什么 $diff 总是与正确答案相差 1?

4

2 回答 2

1

的第二个参数date()需要一个时间戳,你给它两个时间戳的差异 - 在这种情况下 3600.var_dump(date("Y-m-d H:i:s", 3600));是“1970-01-01 02:00:00”。

查看DateTimeDateInterval类。您的代码的等效项如下所示:

$time1 = new \DateTime();
$time2 = (new \DateTime())->modify("+1 hour");
$diff = $time1->diff($time2, true);
var_dump($diff->h); // int(1)
于 2013-09-03T07:37:02.593 回答
0

你在两次之间只有几秒钟。尝试划分为3600

echo round($diff/3600); // 1
于 2013-09-03T07:39:51.547 回答