使用DateInterval循环数月时PHP DatePeriod错误

时间:2017-09-13 20:51:22

标签: php

我使用DateInterval对象循环数月。但是,在运行以下代码时:

 $interval = new DateInterval('P1M');
 $daterange = new DatePeriod('2017-08-01', $interval , '2017-10-01');

 foreach($daterange as $d){
  $start_date = $d->format("Y-m-d");

 echo $start_date;
}

//Expected Output:
// 2017-08-01
// 2017-09-01

给出以下错误:

Fatal error: Uncaught exception 'Exception' with message 'DatePeriod::__construct(): This constructor accepts either (DateTimeInterface, DateInterval, int) OR (DateTimeInterface, DateInterval, DateTime) OR (string) as arguments.' in C:.. Stack trace: #0 C:\..: DatePeriod->__construct('2017-08-01', Object(DateInterval), '2017-10-01') #1 {main} thrown in C:\..

如何获得预期的输出?

2 个答案:

答案 0 :(得分:0)

您应该使用DateTime而不是string。

$begin = new DateTime('2017-08-01');
$end = new DateTime('2017-10-01');
$interval = new DateInterval('P1M');
$daterange = new DatePeriod($begin, $interval, $end);

正如@Barmar所提到的,你也可以使用整数而不是$end作为第三个参数。

$begin = new DateTime('2017-08-01');
$recurrences = 1;
$interval = new DateInterval('P1M');
$daterange = new DatePeriod($begin, $interval, $recurrences);

答案 1 :(得分:0)

DatePeriod构造函数未正确使用。请参阅官方参考DatePeriod

试试这个:

$daterange = new DatePeriod(
    new DateTime('2017-08-01'), 
    $interval , 
    new DateTime('2017-10-01')
);