使用的代码
$date_from1 = new DateTime('1-9-2016');
$date_from=$date_from1->format('Y-m-d');
$date_to1 = new DateTime('30-9-2016');
$date_to=$date_to1->format('Y-m-d');
$diff1=$date_from1->diff($date_to1);
$diff2= $diff1->format('%R %a days');
preg_match_all('!\d+!', $diff2, $matches); //use that to get only number from diff2
for($i=0; $i <= $matches[0][0]; $i++) //$matches return diff2 only number of days
{
$this_date=$date_from1->add(new DateInterval('P1D'));
echo $this_date->format('Y-m-d') . "<br/>";
}
我的输出
2016-09-02 2016-09-03 2016-09-04 2016-09-05 2016-09-06 2016-09-07 2016-09-08 2016-09-09 2016-09-10 2016-09-11 2016-09-12 2016-09-13 2016-09-14 2016-09-15 2016-09-16 2016-09-17 2016-09-18 2016-09-19 2016-09-20 2016-09-21 2016-09-22 2016-09-23 2016-09-24 2016-09-25 2016-09-26 2016-09-27 2016-09-28 2016-09-29 2016-09-30 2016-10-01
预期输出
2016-09-01 2016-09-02 2016-09-03 2016-09-04 2016-09-05 2016-09-06 2016-09-07 2016-09-08 2016-09-09 2016-09-10 2016-09-11 2016-09-12 2016-09-13 2016-09-14 2016-09-15 2016-09-16 2016-09-17 2016-09-18 2016-09-19 2016-09-20 2016-09-21 2016-09-22 2016-09-23 2016-09-24 2016-09-25 2016-09-26 2016-09-27 2016-09-28 2016-09-29 2016-09-30 我不能使用 cal_days_in_month ,因为我有一个日期范围,必须计算所选日期之间的天数。
答案 0 :(得分:0)
你真的很亲近。您只需要更改循环,以便在第一次迭代时$this_date
等于$date_from1
。
变化:
$this_date=$date_from1->add(new DateInterval('P1D'));
要:
$this_date= $i? $date_from1->add(new DateInterval('P1D')): $date_from1;
旁注:您的代码很浪费,因为您多次创建具有相同值的new DateInterval
。如果在循环之前创建一个日期间隔,则可以提高效率:
$interval = new DateInterval('P1D');
然后在循环的每次迭代中使用它:
$this_date= $i? $date_from1->add($interval): $date_from1;