Carbonライブラリで日本語の曜日を表示する方法

f:id:xkato:20190528181803j:plain

加藤です。

システムコーディングで日付のフォーマット変換処理をする機会が多いので、備忘録もかねて今回はそのお話をしようと思います。

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日ズレてる…!?;なんで…!?;」となりますのでお気をつけください。加藤はやりました(自首)

今回は以上です。