2017-09-13 39 views
-1

DateIntervalオブジェクトを使用して月間をループしています。ただし、以下の次のコードを実行している場合:DateIntervalを使用して月間にループする場合のPHP DatePeriodエラー

$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:\.. 

はどうやって予想される出力を得ることができますか?

+4

新しいDatePeriod 'の最初の引数は、()' 'DateTimeInterface'、ない文字列にする必要があります。 3番目の引数は文字列ではなく、 'int'または' DateTime'でなければなりません。 – Barmar

+0

ドキュメントの最初の例を見て気になりましたか?それは正しく行う方法を示しています。 – Barmar

答えて

0

文字列の代わりにDateTimeを使用する必要があります。

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

@Barmarあなたはまた、3番目の引数として整数の代わり$endを使用することができます述べたように。

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

DatePeriodコンストラクタが正しく使用されていません。公式のリファレンスDatePeriodを参照してください。

これを試してみてください:

$daterange = new DatePeriod(
    new DateTime('2017-08-01'), 
    $interval , 
    new DateTime('2017-10-01') 
); 
関連する問題