5

可能重复:
如何使用 php 查找两个日期之间的天数

我不想知道如何做到这一点。我想知道为什么它没有给出预期的结果。

我尝试使用以下代码计算格式为 YYYY-mm-dd 的两个日期之间的天数:

$day1 = strtotime($_REQUEST['start']);
$day2 = strtotime($_REQUEST['end']);

$nbOfDays = $day2 - $day1;
$nbOfDays = ceil($nbOfDays/60/60/24);

echo $nbOfDays;

问题是当我计算 2012-12-01 和 2012-12-31 之间的差异时,它给了我 30 天(应该是 31 天),而 2012-11-01 和 2012-11-30 之间的差异也是 30 天(即是正确的!)

更新纯信息:

我不得不修改这段代码(感谢贾斯汀):

$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$interval = round(abs($day2->format('U') - $day1->format('U')) / (60*60*24));
echo $interval;

为了 :

$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$nb1 = $day2->format('U');
$nb2 = $day1->format('U');
$interval = round(abs($nb1 - $nb2) / (60*60*24));
echo $interval;

因为

$day2->format('U') - $day1->format('U')

等于 0

所以最后,2012-12-31 和 2012-12-01 之间的差异仍然是 30。BUUUTTTT,2012-11-30 和 2012-11-01 之间的差异是 29,所以

echo $interval +1;

在任何情况下都给出正确的天数!

4

1 回答 1

9

您应该使用日期/时间差异date_diff()或其 OO 等效项。DateTime::diff()

$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$interval = $day1->diff($day2);
echo $interval->format('%d');

对于 PHP 5.2 版,您可以使用以下内容:

$day1 = new DateTime($_REQUEST['start']);
$day2 = new DateTime($_REQUEST['end']);
$interval = round(abs($day2->format('U') - $day1->format('U')) / (60*60*24));
echo $interval;

对于 5.2 之前的 PHP 版本,使用strtotime()上述公式:

$day1 = strtotime($_REQUEST['start']);
$day2 = strtotime($_REQUEST['end']);
$interval = round(abs($day2 - $day1) / (60*60*24));
echo $interval;
于 2012-12-19T16:03:51.967 回答