日付間の差分をDBへ登録したい
サイト作成をしていて、入力したDateカラムの情報を用いて
日付間の差分を登録したいと考えました。
DBへはユーザーが日付をそれぞれ入力(start_day
とlast_day
)し、
それらの差分(何日間か)を計算してDBへ登録したい。
$start_day = '2022-12-12';
$last_day = '2022-12-31';
$interval = ($last_day)-($start_day);
echo $interval // 19
のようなイメージ。
型などが影響してか、Date型同士の引き算がlaravelではエラーになってしまったので
そのやり方を考えた。
strtotime関数でフォーマットする
ユーザーが入力した日付データを使って、実際にその差分(日数)を出してみる。
public function store(IdealWeightRequest $request) {
$idealWeight = new IdealWeight();
$idealWeight->start_day = $request->start_day;
$idealWeight->last_day = $request->last_day;
$startDay = strtotime($idealWeight->start_day);
$lastDay = strtotime($idealWeight->last_day);
$idealWeight->period = ($lastDay - $startDay) / (60 * 60 * 24);
}
strtotime関数は2038年問題の際に動作に影響が出てしまう恐れがあるそうなので
Datetime関数を使うのが良いとか。
ですが今回は一旦strtotime関数でやってみました。
また余裕があったらDatetimeやCarbonなどでチャレンジしてみます。
追記
@sgrs38 さんより教えていただきました!
いつもありがとうございます!
Cabonの場合
$sabun = Carbon::create('2022-12-12')->diffInDays(Carbon::create('2022-12-31'));
public function store(IdealWeightRequest $request) {
$idealWeight = new IdealWeight();
$idealWeight->start_day = $request->start_day;
$idealWeight->last_day = $request->last_day;
$idealWeight->period = Carbon::create($idealWeight->last_day)->diffInDays(Carbon::create($idealWeight->start_day));
}