time型のデータは秒まで保存されるため、表示するときは例えば【12:30:00】になります。
秒まで表示する必要がない実装の際、time型だと秒が邪魔になってしまいます。
今回は、秒なしで例えば12:30という具合に何時何分だけ表示する方法を解説します。
手順
やり方はシンプルです。
// 秒なしで表示したい変数を$target_timeとすると
{{ substr($target_time, 0, 5) }}
とすれば良いです。
解説
substr()関数は文字列の一部分を返す関数です。
詳しい解説はPHPの公式ドキュメントに載っていますが、少しだけ今回の場合の解説をします。
time型のデータは例えば、データが【12:30:00】だと【12:30】だけで5文字です。
左から順に文字の順番を0, 1, 2, …と定めると、0番目の【1】から5文字表示すれば【12:30】になりますね。
ここで、今回のコードをもう一度見てみましょう。
{{ substr($target_time, 0, 5) }}
substr()の第一引数で変数【$target_time】を指定、第二引数で先頭にする文字の順番【0】を指定、第三引数で文字数【5】を指定しています。
これで無事、
12:30
と表示されるわけです。
この記事を作った背景
time型のデータを秒なしで表示しようとして、
{{ $target_time->format("H:i") }}
としたところ、
Call to a member function format() on string
とエラーが出て、ネットで調べて出てきた「モデルにカラムを追加する方法」を試して、
protected $dates = [
'arget_time',
];
としたところ、
Unexpected data found. Unexpected data found. Data missing
と、違うエラーが発生して埒が明かなくなりました。
今回のsubstr()を使う方法を思いついて、やってみたら上手くいったので共有しました。
まとめ
秒まで表示する必要がある実装はあまり多くないので、今回紹介した方法を積極的に使っていきましょう!
以上、『【Laravel】time型のデータを秒なし(時:分)で表示する方法』でした。