PHPで日付のデータから月の英語表記の文字列を取得する

今回はPHPのおそらくマイナーであろう関数を使って日付のデータから月の英語表記の文字列を取得したいと思います。

例えば、$birthdayという変数にY-m-dの形のデータが入っているとすると、

$birthday = '1996-08-07'

こうすればできます。

$year = date_format(date_create($birthday), 'Y');

$month = date_format(date_create($birthday), 'm');

$day = date_format(date_create($birthday), 'd');

$jd = cal_to_jd(CAL_GREGORIAN, $month, $day, $year);

$month_name = jdmonthname($jd, 1);

echo $month_name;
// August


使用した関数の説明
・date_create:新しいDatetimeオブジェクトを返す
date_formatはDatetimeオブジェクトを使わないといけないみたいなので、その形に変換するために使いました。

・date_format:指定した書式でフォーマットした日付を返す
第一引数にDatetime型オブジェクトを、第二引数に取得したい形を指定します。
cal_to_jdで月と日と年の数値が必要なため使いました。
例:

// $birthdayから'1996/08/07'で取得したい場合
date_format($birthday, 'Y/m/d')

// $birthdayから0がついていない月の8だけ取得したい場合
date_format($birthday, 'n')

フォーマットの指定について詳しくはこちら↓
年・月・日を取得する ~ PHP 関数 日付・時刻 - Office Tanabe


・cal_to_jd:指定した日付からユリウス積算日を計算する。(ちょっと何言ってるかわからない)
第一引数に変換元のカレンダーを、第二引数に月を表す数値を、第三引数に日を表す数値を、第四引数に年を表す数値を使います。
jdmonthnameでユリウス積算日が必要なため使いました。
関数について詳しくはこちら↓
PHP: cal_to_jd - Manual

・jdmonthname:月の名前を含んだ文字列を返す
第一引数にはユリウス積算日を、第二引数でどの暦に変換するかを指定します。
変換についてはこちら↓
PHP: jdmonthname - Manual
今回は現行の太陽暦であるグレゴリオス暦で欲しかったので1を指定しています。

初めはcase文でやればええやんと思っていましたが、記述が確実に長くなるし調べてみたらcase文を使わなくてもできることが判明したのでやってみました。
(結局どっちを使った方がいいかは自分の中で結論出ず)
でもPHPには面白い関数があるんだなーと思いました。
今回は手続き型でやりましたが、オブジェクト指向型でもできるようです。

またいつか