PHPで時間を作ってみました。 2017-01-29から2017-12-29の開始日。しかし、それが起こったのは、月が最大28日しかないため、2月には印刷できませんでした。プリントの注文方法は2月の日付が28までです。
私のスクリプト:
date_default_timezone_set('UTC');
// Start date
$date = '2017-01-29';
// End date
$end_date = '2017-12-29';
while (strtotime($date) <= strtotime($end_date)) {
echo "$date\n";
echo "<br>";
$date = date ("Y-m-d", strtotime("+1 month", strtotime($date)));
}
出力:
DateTimeクラスを使用して、翌月の最終日を見つけます。
date_default_timezone_set('UTC');
// Start date
$date = '2017-01-29';
// End date
$end_date = '2017-12-29';
while (strtotime($date) <= strtotime($end_date)) {
echo "$date\n";
echo "<br>";
$d = new DateTime( $date );
$d->modify( 'last day of next month' );
$date = $d->format( 'Y-m-d' );
}
別の開始日を試して、翌月の終わりまで進まないようにしたり、2月の日付に2/28を使用したりする可能性があるため、これは完全に興味のあることではないかもしれませんが、連続する各月の29日に戻ります。しかし、これにより、必要なロジックに近づくはずです。 DateTimeの使用はあなたの答えの一部になると思います。
DateTime
を使用する必要がない場合に試すことができる別のアプローチ。
_ date_default_timezone_set('UTC');
// Start date
$date = '2017-01-29';
// End date
$end_date = '2017-12-29';
while (strtotime($date) <= strtotime($end_date)) {
echo "$date\n";
echo "<br>";
$date = date("Y-m-t", strtotime("+30 day", strtotime($date)));
}
_
strtotime("+30 day", strtotime($date)
を使用すると、t
を使用して現在の日付に30日を追加し、月の最後の日付を取得できます。
_ 2017-01-29
2017-02-28
2017-03-31
2017-04-30
2017-05-31
2017-06-30
2017-07-31
2017-08-31
2017-09-30
2017-10-31
2017-11-30
_
このコードを試してください:
<?php
$from = new DateTime;
$to = new DateTime('+1 year');
for($date=clone $from; $date<$to; $date->modify('+1 day')){
echo $date->format('Y-m-d');
}
?>
これを使って
date ("Y-m-t", strtotime("+1 month", strtotime($date)));
これの代わりに、月の最終日を取得します
date ("Y-m-d", strtotime("+1 month", strtotime($date)));