[Laravel]Carbonで日付操作をする際に気をつけること

スポンサーリンク
sampleLaravel

Carbonの日付処理で、基準となる日付の設定と、それを元に操作をした値をクエリで使いたかったのですが、日付の作成の際に何も考えずやっていたら、期待する値とは異なってしまっていた。

Carbonはミュータブルのため操作を行なった際に、元のデータも値が変わってしまいます。
そのため、元々の状態を保持するためにはcopyメソッドを使う必要があります。

期待する値

//基準となる日付
$now = Carbon::create(2022, 11, 11, 12, 30, 30); // 2022-11-11 12:30:30

// $nowを元に以下2つの変数を作ることが目標
$startTime   // 2022-11-12 12:30:00
$endTime     // 2022-11-13 12:30:59

以下間違った例です。
期待する値とはだいぶ異なってしまいました。

$now = Carbon::create(2022, 11, 11, 12, 30, 30); // 2022-11-11 12:30:30

$startTime = $now->addDay(); // 2022-11-12 12:30:30
$startTime->second = 0;      // 2022-11-12 12:30:00

$endTime = $now->addDay(2);  // 2022-11-14 12:30:00
$endTime->second = 59;       // 2022-11-14 12:30:59

copyメソッドを使うことで、元のデータが変化しないように致しました。

$now = Carbon::create(2022, 11, 11, 12, 30, 30); // 2022-11-11 12:30:30

$startTime = $now->copy()->addDay(); // 2022-11-12 12:30:30
$startTime->second = 0;              // 2022-11-12 12:30:00

$endTime = $now->copy()->addDay(2);  // 2022-11-13 12:30:30
$endTime->second = 59;               // 2022-11-13 12:30:59

コメント

タイトルとURLをコピーしました