🕒

[備忘録]Carbonによる日付操作

2022/08/20に公開約1,400字

目的

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

ログインするとコメントできます