CarbonPeriod で期間を逆順にする
Carbon とは
PHP で日付時刻を扱う DateTime 型がありますが、これのラッパーとして高機能なクラスが Carbon です。
1 2 3 4 5 6 7 8 9 10 |
// 今日 $today = Carbon::today(); // 日付文字列に変換 $today_str = $carbon->format('Y-m-d'); // 文字列をパース $carbon = Carbon::parse('2020-01-23 12:34:56'); // iso 形式で変換 $date_str = $carbon->isoFormat('YYYY年M月D日'); |
Carbon は便利で人気のあるライブラリのため Laravel などのフレームワークでも標準で組み込まれています。
CarbonPeriod とは
CarbonPeriod は Carbon のライブラリに含まれている期間を表わすクラスで、これを使うと foreach である期間中の反復処理をするときにとても便利です。PHP 標準にある DatePeriod の Carbon 版です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 2月25日から3月2日までの期間を2日ごと(1日おき)に扱う $period = CarbonPeriod::create('2020-02-25', '2 days', '2020-03-02'); // ループで扱える foreach ($period as $carbon) { echo $carbon->->format('Y-m-d') . "\n"; } // 結果にはちゃんと閏年も考慮されている。 // 2020-02-25 // 2020-02-27 // 2020-02-29 // 2020-03-02 |
逆順にする
さて、CarbonPeriod で期間を作成して forearch で回すときは、過去から未来に日付を扱うことになります。
これを逆転させて日付を未来から過去に向けて表示したいとき、ためしに CarbonPeriod の前後を引数を入れ替えてみるとまったくループの中に入りません。
また、CarbonPeriod は Laravel の Collection ではありませんので、$period->reverser()
のようなコードも書くことができません。
簡単な方法としては、CarbonPeriod を toArray()
メソッドで配列に変換して、それを array_reverse
関数で逆順にソートします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$period = CarbonPeriod::create('2020-02-25', '2 days', '2020-03-02'); // 配列に変換してから逆順にソート $reversed_period = array_reverse($period->toArray()); // 配列なので同じように foreach で扱える foreach ($reversed_period as $carbon) { echo $carbon->format('Y-m-d') . " "; } // 結果 // 2020-03-02 // 2020-02-29 // 2020-02-27 // 2020-02-25 |
toArray() の結果の配列は、Carbon の配列です。foreach で取得した変数の中身は Carbon 型となので同様に扱えます。
ITエンジニア募集中!
キュアコード株式会社はITエンジニアを募集しております。少人数の職場なので、上流・下流やサーバー・クライアント対応の垣根なく、あなたの強みを活かしながら いろいろなことにチャレンジ可能です。エンジニアとしての未経験の方、経験が少ない方も歓迎しています。
下記よりITエンジニア募集の採用情報をご覧いただけます。