🕒
[備忘録]Carbonによる日付操作
目的
Carbonライブラリの操作についてのまとめ。よく使う割に細かいところを忘れがちなので、何度か引っかかったところを整理する。
インスタンス作成
Carbon::parse()
で日付のインスタンスを作成する。引数の文字列によって現在時刻以外のインスタンスも作れる
$year = 2022;
$month = 3;
$day = 4;
Carbon::parse("$year-$month-$day");
例: 月初の日付のインスタンスを作成
$year = 2022;
$month = 3;
Carbon::parse("$year-$month-01");
Carbon::new()
で作成するパターンもある。
$now = Carbon::now(); // $now = Carbon::parse('now');と同じ
フォーマット
記号の種類、大文字小文字によって、フォーマットする形式を細かく指定できる。
データベースにTIMESTAMPとして保存できる形にフォーマットする
Carbon::parse("$year-$month-01")->format('Y-m-d');
Carbon::parse("$year-$month1")->format('Y-m-d H:i:s');
Carbon::parse("$year-$month1")->format('Y-m-01');
区切り形式: yy/mm/dd, yy-mm-dd
日付の形式: YY(上二桁),yy(フル表示)
月初・月末を取得
Carbon::parse("$year-$month")->startOfMonth();
Carbon::parse("$year-$month")->endOfMonth();
詳細な指定
よく忘れるのが、指定に漏れがある時の挙動。
- 日付だけプログラムで指定して、時刻は現在時刻をそのまま使いたい
- 年、月は変数で、日だけ月末(月初)にしたインスタンスを作成
など、year-month-dayという完全な形を引数にできないケースがある。ymdのどれかが欠けた文字列を渡してもオブジェクトが作られるのか?
[結果]年だけ指定の場合
$date = Carbon::parse("$year");
echo var_dump($date); // date: 2022-08-17 20:22:00.0 Asia/Tokyo (+09:00)
部分指定でもオブジェクトは正常に作られる。未指定の分は現在の日付時刻から補完される。
当然、フォーマットもできる。
$date = Carbon::parse("$year-$month")->format('y-m-d');
echo var_dump($date); // "22-08-01"
これを利用して、現在時刻の一部だけずらす、または使いまわした取得ができる。
入力年月の末日
$date = Carbon::parse("$year-$month")->endOfMonth() //"2022-08-31"
暦に合わせて最終日が入る。
Discussion