web-dev-qa-db-ja.com

PHPで日付範囲を作成するにはどうすればよいですか?

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)));
    } 

出力:

enter image description here

9
Siti Rahmah

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の使用はあなたの答えの一部になると思います。

8
davidethell

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 
_
2
A J

このコードを試してください:

    <?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');
         }
    ?> 
1
Pradeep Singh

これを使って

date ("Y-m-t", strtotime("+1 month", strtotime($date)));

これの代わりに、月の最終日を取得します

date ("Y-m-d", strtotime("+1 month", strtotime($date)));