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