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週間たったユーザーにメールを送信する
  • 作成されたデータを好きなタイミングで、所定の場所に転記する

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

ぜひお試しください♪

じゅんこ
じゅんこ

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

Laravelデータベース Laravel自動処理

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる


Laravelの教科書限定コミュニティ【Laravelの教科書ラボ】はじめました。
セミナーで、StripeやChatGPT連携、デバックなど実践スキルを分かりやすく学べます。

ラボの案内を見てみる

Twitter始めました。
40代からプログラミング!

コメント

  1. 伊藤昌市朗 より:

    >データベースから、今日から7日前に作成されたデータをを取り出す
    この方法は、私が確認した環境では検索速度が遅くなりました。
    確認DB:MariaDB10.6
    カラムのデータタイプ:timestamp、index設定
    データ件数:約30万件
    この方法よりも、以下の方が早くなりました。
    ->where(“created_at”, “>=”, “NOW() – INTERVAL 7 DAY”)

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