Laravel 特定の日付・時間のデータ取得にはCarbonとwhereDateを使おう

Laravelデータベース

Laravelで日付・時間関係の操作をするときは、CarbonとwhereDateの組み合わせが最強。

「今日から遡って1週間以内に作成されたデータを抽出したい」

「特定の日から5日後のデータを取り出したい」

といった要望を実現できます。

実際にCarbonとwhereDateを使ってデータを取りだす方法を4つ紹介します。

まだ使ったことがない、という場合には、まずは下記でCarbonのライブラリをインストールしてみてくださいね。

Laravel 特定の日付・時間のデータ取得にはCarbonとwhereDateを使おう

今回は、下記のテーブルからデータを取り出していきます。

まずはCarbonを使った基本的な使い方から。

① CarbonとwhereDateで本日作成したデータを抽出する方法

本日(2/26)作成されたデータを抽出してみます。

下記のように記述します。

ポイントは、下記3点です。

  • use宣言でCarbonを入れ忘れないようにする
  • Carbon::today() で本日の日付を取り出す
  • whereDateを使ってデータベースから値を探す

本日の日付は2月26日なので、下記のデータが抽出されます。

わたしは最初whereDateではなく、whereを使っていましたが、これだと うまくいかず。

じゅんこ
じゅんこ

うーん。なんでだろう??

と試行錯誤した後、whereDateにしないと日付を検出してくれないことが分かりました^^;

なお、プロジェクト作成後にTimezoneを変更していない場合には、Carbonの日付に時差が発生します。

config/app.php の ‘timezone’ を ‘Asia/Tokyo’ にしておきましょう!

② CarbonとwhereDateで1週間前に作成したデータを抽出する方法

次は本日(2/26)から1週間前に作成したデータを抽出してみます。

下記のように記述します。

subDayの後のカッコの中に、本日の日付から何日前にするか、数字を設定します。

今回は1週間前のデータを取り出したいので、subDay(7)としております。

本日の日付は2月26日。本日(2/26)から1週間前の2/19に作成された下記データが抽出されます。

なお subDay部分を変更すると、本日の日付から加算・減算して、色々な日付を抽出できます。

Carbonを組み合わせて良く使う、日付変更のためのメソッドを表にしておきますね。

【Carbonの日付を加算・減算するメソッド】

addHour() 時間を加算
addDay() 日付を加算
addMonth() 月を加算
addYear() 年を加算
subHour() 時間を減算
subDay() 日付を減算
subMonth 月を減算
subYear() 年を減算

③ CarbonとwhereDateで遡って7日以内に作成されたデータを抽出する方法

日付を指定してデータを取り出す場合には、「遡って〇日以内のデータ」と指定したいことも多々あります。

そんな場合には、不等号を使います。

たとえば、「今日(2/26)から遡って7日以内に作成されたデータ」を取り出す場合は、下記のようにします。

ポイントは、whereDateの後の設定で、‘<=’ を利用している点です。

これによって、作成日が本日(2/26)から遡って7日前より新しい日付のデータが全て取り出せます。

今回のデータベースでは、下記の3つのデータが抽出されます。

④ Carbon parse とwhereDateで特定の日付に作成されたデータを抽出する方法

ここまで「本日」を基準に日付を算出し、データを取得してきました。

ただ「本日」ではなく、特定の日付を基準にしてデータを取得することもできます。

たとえば、「dangosテーブルのcreated_atの日付が今日(2/26)から3日以内のデータ」を取り出す場合は、下記のようにします。

特定の日付は、Carbon::parse(特定の日付) を使って指定します。

この日付を元に、whereDateを使って、条件に合うデータを取り出します。

今回のデータベースでは、下記の3つのデータが抽出されます。

さいごに

CarbonとwhereDateを使ってデータを抽出する方法を4つ紹介しました。

Carbonの便利さが伝わったら嬉しいです。

なお、Laravelには定期的な処理を自動で実行できるスケジューラー機能も備わっています。

スケジューラー機能の中にCarbonを組み込めば、

  • 登録後1週間たったユーザーにメールを送信する
  • 作成されたデータを好きなタイミングで、所定の場所に転記する

など、色々なことができちゃいます。

ぜひお試しください♪

じゅんこ
じゅんこ

登録後のユーザーへ自動でメール送信する方法は下記で解説しているので、試してみたくなったら、併せて読んでくださいね。

コメント

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