【Carbon】年月を指定して月の日付を様々な形で出力する【Laravel】
こんにちは、エンジニアの阿部です。
以前はFullCalendarに関する記事を書かせて頂きました。
今回は前回の記事に関連した内容として、1ヶ月分の日付を様々な形で出力する方法を紹介させて頂きます。
開発環境
OS:Windows11
言語:Laravel
使用ライブラリ:Carbon
1ヶ月分の日付の取得方法
今回はCarbonライブラリを用いて1ヶ月分の日付の取得を行っていこうと思います。
Carbonについては下記サイトに詳細が記載されておりますので、そちらをご確認ください。
1ヶ月分の日付を取得するに当たって月初と月末の日付の情報が必要となります。
Carbonには月初と月末の日付を取得する方法がありますので、そちらを利用して下記のように月初と月末の日付を取得します。
//指定する(あるいは渡される)年月日のデータ
$target_date = '2024-06-18';
//年
$year = date(('Y'), strtotime($target_date));
//月
$month = date(('m'), strtotime($target_date));
//月初の日付
$first_day = Carbon::create($year, $month, 1)->firstOfMonth()->format('d');
//月末の日付
$last_day = Carbon::create($year, $month, 1)->lastOfMonth()->format('d');
年月を指定してfirstOfMonth()を利用することで月初の、lastOfMonth()を利用することで月末の年月日が取得できるため、形式を日付に変更することで月初と月末の日付を取得しています。
月初と月末の日付を取得した後はfor文でループさせることで1ヶ月分の日付を取得していきます。
//1ヶ月分の日付一覧の格納先
$month_day_list = [];
//曜日表示用配列
$week = [
'(日)', //0
'(月)', //1
'(火)', //2
'(水)', //3
'(木)', //4
'(金)', //5
'(土)', //6
];
//月初から月末までfor文で回す
for ($day = $first_day; $last_day >= $day; $day++){
//日付の取得
$month_day = Carbon::create($year, $month, $day);
//曜日の算出
$day_of_week = $week[date('w',strtotime($month_day))];
$days = [];
//【年/月/日(曜日)】の形式の日付
$days['format_date'] = $month_day->format('Y/m/d'.$day_of_week);
//【年-月-日】の形式の日付
$days['target_date'] = $month_day->format('Y-m-d');
//各形式の日付を格納
$month_day_list[] = $days;
}
今回はフロント表示用の曜日も込みの形式とバックでの判定用のdate型の形式の2種類が必要だったため、2種類の形式で1ヶ月分の日付を取得しました。
日付の一覧は下記の様に格納されるため、出力先でforeach文で回して変数名を指定すれば必要な形式での日付を出力できます。
array (
0 =>
array (
'format_date' => '2024/06/01(土)',
'target_date' => '2024-06-01',
),
1 =>
array (
'format_date' => '2024/06/02(日)',
'target_date' => '2024-06-02',
),
2 =>
array (
'format_date' => '2024/06/03(月)',
'target_date' => '2024-06-03',
),
.
.
.
28 =>
array (
'format_date' => '2024/06/29(土)',
'target_date' => '2024-06-29',
),
29 =>
array (
'format_date' => '2024/06/30(日)',
'target_date' => '2024-06-30',
),
まとめ
Carbonライブラリを使用することで簡単に1ヶ月分の日付を取得することができました。
今回の例では2種類の形式でしか出力していませんでしたが、様々な形式で出力が可能ですので必要に応じて様々な形式で出力することが可能ですので、是非試してみてはいかがでしょうか。