0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

入力フォームから送られてきた「年」と「月」から年月日を取得し、DB検索

Posted at

最初に

今回、実務で「年」と「月」という風にフォームが分かれており、入力された値から年月日を取得して、その月の月初と月末を算出し、DBから範囲検索する処理を実装したので自分用のメモとして執筆致します。

まず「年」と「月」は下記のように入力フォームから値が送られる事が前提です。

$request->year //入力フォームから送られてくる年(例:2022)int型
$request->month //入力フォームから送られてくる月(例:2)int型

次に入力フォームから送られてきた値を基に、年月日を取得します。

if (!is_null($request->year) && !is_null($request->month) {
   $date_time_from = Carbon::crateFromDate($request->year, $request->month, 1);
   $date_time_to = $date_time_from->copy();
   $start_month = $date_time_from->startOfMOnth(); 
   $end_month = $date_time_from->endtOfMOnth();
   $query = $query->whereBetween('daily_report_date', [$start_month, $end_month]);

Carbonについてオススメの記事はコチラです。(Carbonで日付や時間など操作できます)

まずCarbon::createFromDateで Y-m-d形式のCarbonインスタンスを作成します。第一引数にセットしたい年、第二引数にセットしたい月、第三引数にセットしたい日付を数値で定義します。

例を挙げると、年(2022)、月(2)、日(1)と定義すると2022-02-01 00:00:00という日付が作成出来ます。
$date_time_from = Carbon::crateFromDate($request->year, $request->month, 1);

次に$date_fromに格納した日付を$date_time_toにコピーします。これは後に月初と月末を算出する際に同じCarbonインスタンスだと、$start_month$end_monthの両方が月末になってしまうからです。

$date_time_to = $date_time_from->copy();

$start_month = $date_time_from->startOfMOnth(); 月初を取得(例:2022-02-01)
$end_month = $date_time_from->endtOfMOnth();月末を取得(例:2022-02-28)

後は、検索対象の日付形式のカラムがdaily_report_dateなので、whereBetweenメソッドの第一引数に検索対象のカラムを記述し、第二引数に配列形式で開始日付を定義するだけです。

$query = $query->whereBetween('daily_report_date', [$start_month, $end_month]);

これで検索対象の日付形式のカラムから、開始日付が2022-02-01から、終了日付が2022-02-28までの範囲検索が可能になります。

以上となります!閲覧頂きありがとうございます!編集リクエストやアドバイスがあればコメント等で頂けますとありがたいです!宜しくお願い致します。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?