web-dev-qa-db-ja.com

Laravelデータベースの結果からDateTimeをフォーマットする

私のデータベースには2つの日付がmysql DateTime形式YYYY-MM-DD HH:MM:SSで保存されています。このデータを(他の文字列などで)取得したら、別の形式(おそらくDD.MM.YYYY HH:MM:SS)に変換して、ビューのテーブルセルに表示します。データベースの日付はdate_beginおよびdate_endと呼ばれます。

データベースからこの日付を取得したら、それをDD.MM.YYYY形式に変換し、日付と時刻を分離し、時刻をカスタム文字列( "HH1:MM1-HH2:MM2")に保存して、両方を見る。

どうすればこれを達成できますか?コントローラーではなくビューで変換する例をいくつか見つけましたが、これはMVCには適していないと思います。

7
quantatheist

"ビューの日付のフォーマットはMVCに適していない"という印象を得た場所がわからない。これは問題ではないためなんでも。

Eloquent Models を使用している場合は、非常に簡単に実行できます。

1。モデルクラスの$datesプロパティに列を追加します。

protected $dates = ['date_begin', 'date_end'];

これにより、値が mutated から Carbon instances になることが保証されます。

2。ビューファイルでは、Carbonが提供するformatメソッドを次のように使用できます。

<!-- To use only the date with the given format -->
{{ $item->date_begin->format('Y.m.d') }}

<!-- To use only the time with the given format -->
{{ $item->date_begin->format('H:i:s') }}

<!-- To use both date and time with the given format -->
{{ $item->date_begin->format('Y.m.d H:i:s') }}

値を時間と日付に分割する必要はありません。必要な format を使用して、DateTime値から必要なものを表示するだけです。


Eloquentモデルを使用していない場合は、Carbonを手動で使用して、次のように値をフォーマットできます。

{{ Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $item->date_begin)->format('Y.m.d') }}
23
Bogdan

私はPHP Carbonなしのソリューションを使用しました:

データベースの日付を取得して(デフォルトの形式:YYYY-MM-DD HH:MM:SS)、ビューに印刷するときに$item->date_beginを次のように置き換えます。

date('d-m-Y H:i:s', strtotime($item->date_begin))

その後、それをデータベースに保存するときに、DB更新を追加します。

date('Y-m-d H:i:s', strtotime($request->date_begin))
4
gtamborero