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には面白い関数があるんだなーと思いました。
今回は手続き型でやりましたが、オブジェクト指向型でもできるようです。
またいつか