计算两个日期之间的天数[重复]

Posted

技术标签:

【中文标题】计算两个日期之间的天数[重复]【英文标题】:Calculate number of day between two dates [duplicate] 【发布时间】:2012-12-07 00:52:28 【问题描述】:

可能重复:How to find number of days between two dates using 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;

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

【问题讨论】:

好吧,我真的不想知道该怎么做。我想知道为什么某些日期的结果是正确的,而其他日期的结果却不正确。 1+30=31; 30 是正确的 12 月。 11 月似乎给出了 29.041,而你的上限是 30。不知道为什么它给出了这个数字..我认为 DST 开关是在 10 月..但也许还有其他类型的时间调整,它关闭了一个小时或所以。 (你们为什么不赞成他?他的问题表述得很好) 我认为这个问题所需的日期算术有点专业,因为 OP 似乎需要开始和结束日期跨越的天数,而不是 这些日期之间的差异(以天为单位)。 2012-12-01 和 2012-12-31 之间有 30 天,2012-11-01 和 2012-11-30 之间有 29 天,但 OP 分别需要 31 和 30 天。 strtotime()local 时间工作,因此将本地时区设置为 UTC 以避免任何夏令时差异抛出结果。 【参考方案1】:

您应该使用 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;

【讨论】:

很好的答案,但我们的客户使用的是 php 版本 听起来是时候升级或寻找更好的客户了。 ;) 同一个客户端正在使用 Register_global 和 magic_quote_gpc.. 抱歉 :((不,我们没有编写他们的软件) $today 和 $start 来自哪里? :P

以上是关于计算两个日期之间的天数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在html中计算两个输入类型=“日期”之间的天数[重复]

如何计算两个日期之间的小数天数[重复]

如何删除两个日期之间的星期六和星期日并计算总天数[重复]

两个日期之间的天数差异[重复]

Java获取两个日期之间的天数[重复]

PHP:以YYYY-MM-DD格式获取两个日期之间的天数[重复]