環境
Laravel v9.5.1 (PHP v8.1.3)
日付に関するバリデーション判定集
特定のユーザーの投稿を期間を指定して集計したいとき、$from
と$to
に投げられるパラメータに日付ならではのバリデーションをつけたい。
$user->postAggregations
->whereBetween('created_at', [$from, $to]);
投げられた日付パラメータが
- 「2022-1-1」のようなハイフン以外の場合
if (! DateTimeImmutable::createFromFormat('Y-m-d', $from) || ! DateTimeImmutable::createFromFormat('Y-m-d', $to)) {
throw new InvalidDateFormatException();
}
- 存在しない日付の場合
list($fromY, $fromM, $fromD) = explode('-', $from);
list($toY, $toM, $toD) = explode('-', $to);
if (! checkdate($fromM, $fromD, $fromY) || ! checkdate($toM, $toD, $toY)) {
throw new InvalidDateFormatException();
}
- 終了日が開始日より前の日付の場合
if ($from > $to) {
throw new SpecifyEndDateAfterStartDateException();
}
さいごに
各処理をメソッドにしたり、$from
と$to
をコンストラクタにしてクラスにしたりといろいろ使えると思います!