我使用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:\..
如何获得预期的输出?
答案 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')
);