【Laravel8】DBからとってきた日時をCarbonを使い整形する

2021年12月2日

はじめに

システム作っていると日付を扱う機会が多いですよね。

そして年や月毎によって日数が違ったり、曜日ごとで処理を変えないといけなかったりと、
ややこしくてバグを生みやすい日付関連の処理。

リリース後しばらくしてバグが発覚ってことも少なくはありません。

なるべく、既存ライブラリを使い、自分で変換処理等書きたくないところです。

LaravelではPHP界隈では有名なCarbonの日付用ライブラリが使えるようになっています。
PJ内にインストールされているので宣言するだけでCarbonのライブラリが使えます。
あら簡単。

PHPの標準関数にも日付関連の関数は多いですが、
Carbonの方がかゆいところに手が届く感じで良いでしょう。

Carbonとは

PHPのDate Time Classを継承しているライブラリ

本家 https://carbon.nesbot.com/

日付処理にはCarbon

日付処理をする場合は是非Carbonを使うことをお勧めします。
Carbonライブラリ本家のページ ※英語です

Laravel8でのCarbonの使い方を見ていきます
今回はyyyy-mm-dd hh:mm:ss 例)2021-11-21 04:39:55のDBからとってきた値を
2021の年だけ取り出してみます。

では早速みていきましょう。

Controllerで使う

DBの値をControllerでとってきて処理することが多いのでControllerで処理する方法を載せてみます。
index function内でテーブルcreated_atの値をとってきて年だけ取得、表示させるサンプルです。

7行目あたりにCarbon使います宣言をします。
use Carbon\Carbon;

こんな感じで扱いたい日付をCarbonクラスの引数に渡してあげればOK 
new Carbon($created_at);
直接 new Carbon($test->created_at); でもOKでしょう。
今回はデバッグのために一旦変数にしています。
これを下記のサンプルコードのように
オブジェクト変数にセットして、サンプルのような形で年を取り出します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;

class IndexController extends Controller
{
    public function index(){
        $tests = DB::table('tests')->get();

        foreach($tests as $test) {
            $created_at = $test->created_at; 
            echo "original: " . $created_at;
            $dt = new Carbon($created_at);
            echo "converted: " . $dt->year . "<br>";
        }
    }
}

Viewで使う

UIにあった形で日付変換したい時に便利です。
こんな感じでCarbonのparse関数を使えば変換できます!
Viewでも年だけ取り出してみます。

7行目がCarbonライブラリを使い、年を取り出しているところです。

<table border="1">
        <tr>
            <th>作成年</th>
        </tr>
        @foreach($tests as $recode)
            <tr>
                <th>{{\Carbon\Carbon::parse($recode->created_at)->year}}</th>
            </tr>
        @endforeach
</table>

サンプル

以上です!意外と簡単ですね。さすがCarbon。

今回はDBに入っていた日時を使いましたが、
Copyright等View側でシステムのアクセス時間に合わせた年月日を動的に表示させたいこともあるでしょう。
そういう場合はView側で日付表示する方法についてお読みください。

関連記事

Posted by karaagelovers