可能重复:
如何使用 PHP 计算两个日期之间的差异?
$begintime=strtotime("2012-12-19");
$endtime=strtotime("2013-02-22");
结果应该是;
array(
array('text'=>'12/2012','days'=>13),
array('text'=>'01/2013','days'=>31)
array('text'=>'02/2013','days'=>22)
)
可能重复:
如何使用 PHP 计算两个日期之间的差异?
$begintime=strtotime("2012-12-19");
$endtime=strtotime("2013-02-22");
结果应该是;
array(
array('text'=>'12/2012','days'=>13),
array('text'=>'01/2013','days'=>31)
array('text'=>'02/2013','days'=>22)
)
我更喜欢在面向对象的方法中工作。
$begintime = new DateTime('2012-12-19'); // always use single quote whenever possible
$endtime = new DateTime('2013-01-22');
$time_interval = $endtime->diff($begintime); // in DateInterval object format
echo 'the time interval will be: ' . $time_interval->format('%d') . ' days';
对于您建议的转换为数组格式,请自行处理。(我认为不是问题的重点)
为了得到日子,试试这个:
$begintime = '2012-12-19';
$endtime = '2013-02-22';
$bd = new DateTime($begintime);
$ed = new DateTime($endtime);
$c = $bd->format('t') - $bd->format('d') + 1;
$pass = false;
while($bd->format('Y') < $ed->format('Y')
|| $bd->format('n') < $ed->format('n')) {
$bd->modify("+1 month");
echo $c." ";
$c = $bd->format('t');
$pass = true;
}
$c = $ed->format('d');
if(!$pass)
$c -= $bd->format('d') - 1;
echo $c;
$bd->format('t')
给出一个月中的最大天数。
ideone 使用 PHP 5.2.11。我想你可以使用 PHP 5.4
$bd->add(new DateInterval("P1M"));
而不是$bd->modify("+1 month");
.
编辑:修复了在同一月份和同一年开始和结束时的错误。
编辑: 恢复为显式比较。再想一想,没有 if/else 会更好。