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
コメント