【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 を指定すると、 取得する日付・時刻から開始日を除外