加藤です。
システムコーディングで日付のフォーマット変換処理をする機会が多いので、備忘録もかねて今回はそのお話をしようと思います。
phpで日付周りの処理をするときにはCarbonライブラリが便利です。
Carbonで日付変換 基本の使い方
use Carbon\Carbon; // 日付(文字列)をCarbonにパース $carbon_date = Carbon::parse("2019-01-01 12:30:59"); // 「2019/01/01」にフォーマット変換 $formatted_date = $carbon_date->format("y/m/d"); // 「2019-01-01 12:30:59」 $formatted_date = $carbon_date->format("y-m-d H:i:s"); // 「2019年01月01日」 $formatted_date = $carbon_date->format("y年m月d日");
基本の使い方はこんな具合です。
今回紹介するのはシンプルな日付のフォーマット変換だけですが、Carbonを使うとパースしたオブジェクトから○時間前、○年後、○月の○週目が何曜日…等々を取得できるメソッドがたくさん用意されています。
月の末日とか閏年の計算とかはたぶん、Carbon無しでやろうとすると大変苦しみます…本当にありがたや…。
曜日をつけたい!
インフォメーションやブログなどの日付形式は「2019年1月1日(火)」のように、日付の後ろに曜日をつける形のデザインが多いです。
Carbonで曜日付きのフォーマットは、用意されていることはされているのですが、これは残念ながら英語です。
// 「2019年01月01日(Tue)」になってしまう
$formatted_date = $carbon_date->format('Y年m月d日(D)')
日本語の曜日の出し方1:日本語にローカライズしてフォーマット
日本語の曜日にしたい場合はローカライズのフォーマットをしなければいけません。
// 日本語ロケールをセット
setlocale(LC_ALL, 'ja_JP.UTF-8');
// これで「2019/01/01(火)」になります
$dayOfWeek = $carbon_date->formatLocalized('%Y年%m月%d日(%a)');
日本語の曜日の出し方2:日本語曜日の配列を作る
①のようにロケールセットしたほうがプログラム的には格好いいんでしょうけれど、 曜日を配列でベタ書きして$carbon_date->dayOfWeekの戻り値0~6を配列のインデックスとして対応させて取得する方法も、phpの曜日変換でよくあるやり方のようですね。
$weekday = ['日', '月', '火', '水', '木', '金', '土'];
// これでも「2019/01/01(火)」になります
$formatted_date = $formatted_date.'('.$weekday[$carbon_date->dayOfWeek].')';
この方法は曜日の配列をうっかり月曜始まりにしてしまうと 出来上がった画面を見て「え!曜日が1日ズレてる…!?;なんで…!?;」となりますのでお気をつけください。加藤はやりました(自首)
今回は以上です。