gotohayato.com

moon indicating dark mode
sun indicating light mode

PHP で固定間隔の時系列を生成する方法

2016/01/15PHP

PHP の組み込みの関数を利用して固定間隔のタイムシリーズを取得する方法についてご紹介します。

出力のイメージは次のとおりです。

[
'2020年12月',
'2020年11月',
'2020年10月',
]

この場合は DatePeriod オブジェクトを使うやり方がシンプルです。

/**
* 1 ヶ月間隔で連続した年月を生成する
*/
function get_month_series(DateTime $start, DateTime $stop) {
$interval = new DateInterval('P1M');
$monthrange = new DatePeriod($start, $interval, $stop);
$time_units = [];
foreach ($monthrange as $m) {
$value = date('Y年m月', $m->getTimestamp());
$time_units[] = $value;
}
return array_reverse($time_units);
}

テストしてみます。

$start = new DateTime();
$start->setDate(2020, 10, 1);
$stop = new DateTime();
$stop->setDate(2021, 1, 1);
$months = get_month_series($start, $stop);
var_dump($months);
// => [
// "2020年12月",
// "2020年11月",
// "2020年10月",
// ]

うまく使えています。

ポイントは次のとおりです。

  • DateInterval() のコンストラクタには固有の書式( P1M など)を使う(ちなみに P1M は 1 ヶ月間隔という意味です)。
  • DatePeriod() はネガティブインターバルは受け付けないので、降順の一覧を生成したい場合は昇順に生成したものを array_reverse() でひっくり返す必要がある。

PHP だとこういう処理は手続き型で汚く書いてしまいがちですが、こういうこともできるみたいです。 日付選択のセレクトボックスの生成などに重宝します。

関連記事


後藤隼人
個人事業でウェブ開発やマーケティングをしています。
GitHub
© 2020 gotohayato.com
サイトについてタグ一覧記事アーカイブ