计算两个日期之间的天数

PL *_*det 5 html php date web

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

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

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

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

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

echo $nbOfDays;
Run Code Online (Sandbox Code Playgroud)

问题是,当我计算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;
Run Code Online (Sandbox Code Playgroud)

用于:

$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;
Run Code Online (Sandbox Code Playgroud)

因为

$day2->format('U') - $day1->format('U')
Run Code Online (Sandbox Code Playgroud)

等于0

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

echo $interval +1;
Run Code Online (Sandbox Code Playgroud)

无论如何都给出了正确的天数!

Jus*_*ᚄᚒᚔ 9

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

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

对于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;
Run Code Online (Sandbox Code Playgroud)

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

$day1 = strtotime($_REQUEST['start']);
$day2 = strtotime($_REQUEST['end']);
$interval = round(abs($day2 - $day1) / (60*60*24));
echo $interval;
Run Code Online (Sandbox Code Playgroud)

  • 听起来是时候升级或找到更好的客户了.`)` (2认同)