【PHP】期間内から任意の間隔で日付・時刻を取得する例|DatePeriodクラス

PHPでは、日付・時刻を表すことができるDateTimeクラス、DateTimeImmutableクラスがあります。

今回は、その日付・時刻を扱うクラスと、以下の2つのクラスを使用し、指定した間隔で日付・時刻を取得する例となります。

  • DateIntervalクラス(日付・時刻の間隔をあらわすことが可能)
  • DatePeriodクラス(日付・時刻の期間をあらわすことができ、指定した間隔で日付・時刻の取得が可能)

なお、今回の例で日付・時刻を扱うクラスには、DateTimeImmutableクラスを使用しています。

指定した期間内から任意の間隔で日付・時刻を取得する例

期間内から任意の間隔で日付を取得する例

以下は、指定した期間内から、任意の間隔で日付を取得するとなります。

例では、'2020-01-01'と'2020-01-10'の間の期間内から、'2020-01-01'を開始日として、2日の間隔で日付を取得して出力します。

// 期間の開始日
$begin = new DateTimeImmutable( '2020-01-01' );
// 期間の終了日
$end = new DateTimeImmutable( '2020-01-10' );
// 日付を取得する間隔。以下の間隔は2日
$interval = new DateInterval( 'P2D' );

$daterange = new DatePeriod( $begin, $interval ,$end );
foreach( $daterange as $date ){
    echo $date->format( 'Y年m月d日' ) . '<br>';
}

出力結果

2020年01月01日
2020年01月03日
2020年01月05日
2020年01月07日
2020年01月09日

期間内から任意の間隔で時刻を取得する例

以下は、指定した期間内から、任意の間隔で時刻を取得するとなります。

例では、例では、'2020-01-01 12:00'と'2020-01-01 18:00'の間の期間内から、'2020-01-01 12:00'を開始時刻として、1時間30分の間隔で時刻を取得して出力します。

// 期間の開始日
$begin = new DateTimeImmutable( '2020-01-01 12:00' );
// 期間の終了日
$end = new DateTimeImmutable( '2020-01-01 18:00' );
// 時刻を取得する間隔。以下の間隔は1時間30分
$interval = new DateInterval( 'PT1H30M' );

$daterange = new DatePeriod( $begin, $interval ,$end );
foreach( $daterange as $date ){
    echo $date->format('m月d日h時i分') . '<br>';
}

出力結果

01月01日12時00分
01月01日01時30分
01月01日03時00分
01月01日04時30分

DateIntervalについて

DateIntervalクラスのオブジェクトでは、日付・時刻の間隔をあらわすことができます。

パラメータ

オブジェクト作成時に指定できるパラメータは以下となります。

new DateInterval( $interval_spec );
$interval_spec
間隔を「ISO 8601」フォーマットによって指定

間隔を指定するフォーマットは、P から始まる値となり、間隔の単位は、整数値の後に間隔指示子をつけて表します。また、時間の要素を含む場合は、時間部分の前に文字 T を入れます。

間隔を指定するフォーマットの詳細は、以下のリンク先を参考にしてみてください。

PHP: DateInterval::__construct - Manual

DatePeriodについて

DatePeriodクラスで作成したオブジェクトでは、日付・時刻の期間をあらわすことができ、指定した間隔で日付・時刻を取得することができます。

パラメータ

オブジェクト作成時に指定できるパラメータには、以下の3パターンがあります。

new DatePeriod( $start, $interval, $end, $options );
new DatePeriod( $start, $interval, $recurrences, $options );
new DatePeriod( $isostr, $options );
$start
期間の開始日を指定
$interval
日付・時刻を取得する間隔をDateIntervalクラスのオブジェクトで指定
$end
期間の終了日を指定
$recurrences
繰り返す回数を指定
$isostr
「ISO 8601」フォーマットにより繰り返し間隔を指定
$options(省略可)
DatePeriod::EXCLUDE_START_DATE を指定すると、 取得する日付・時刻から開始日を除外

参考サイトなど

コメント投稿コメント投稿欄を開く

コメントは項目欄(*は必須項目)を入力し、「コメントを送信」ボタンをクリックしてください。 (メールアドレスは公開されることはありません。コメントの公開は承認制となります。)

また、多忙によりコメントには返信できない場合があります。

Twitterで返信する場合はこちらから。