データベースから取得した日付フォーマットを変更したい。今私は2016-10-01{{$user->from_date}}
を得ました。私はlaravel 5.3でフォーマット 'd-m-y'を変えたいです
{{ $user->from_date->format('d/m/Y')}}
これを試して:
date('d-m-Y', strtotime($user->from_date));
日付をd-m-Y
フォーマットに変換します。
注:この解決策は、phpとその任意のフレームワークに適した一般的な解決策です。 Laravel固有の方法については、 Hamelraj が提供する解決策を試してください。
LaravelにCarbonを使うといい
{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
モデルセット内:
protected $dates = ['name_field'];
あなたの見解の後に:
{{ $user->from_date->format('d/m/Y') }}
作品
あなたはDate Mutators
をチェックすることができます: https://laravel.com/docs/5.3/eloquent-mutators#date-mutators
from_date
配列のUser
モデル列$dates
に設定する必要があります。その後、$dateFormat
でフォーマットを変更できます。
もう1つの選択肢は、このメソッドをUser
モデルにも追加することです。
public function getFromDateAttribute($value) {
return \Carbon\Carbon::parse($value)->format('d-m-Y');
}
そして{{ $user->from_date }}
を実行すればビューにあなたが望むフォーマットが表示されます。
刃テンプレートで使いやすい日付を使うCarbonそのように
{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
方法1:
strtotime()
を使用して日付を指定の形式に変更するのが最善の形式です。
strtotime()
- 英語のテキストによる日時の説明をUNIXのタイムスタンプに変換する
この関数は英語の日付フォーマットを含む文字列が与えられることを期待しており、そのフォーマットをUnixタイムスタンプ(1970年1月1日00:00:00からの秒数)にパースしようとします。現在の時刻が指定されていない場合.
例:
<?php
$timestamp = strtotime( "February 26, 2007" );
print date('Y-m-d', $timestamp );
?>
出力:
2007-02-26
方法2:
date_format()
- 新しいDateTimeオブジェクトを返し、そして日付をフォーマットします:
<?php
$date=date_create("2013-03-15");
echo date_format($date,"Y/m/d H:i:s");
?>
出力:
2013/03/15 00:00:00
3つの方法があります。
1)Laravel Modelを使用する
$user = \App\User::find(1);
$newDateFormat = $user->created_at->format('d/m/Y');
dd($newDateFormat);
2)PHP strtotimeを使う
$user = \App\User::find(1);
$newDateFormat2 = date('d/m/Y', strtotime($user->created_at));
dd($newDateFormat2);
3)カーボンを使う
$user = \App\User::find(1);
$newDateFormat3 = \Carbon\Carbon::parse($user->created_at)->format('d/m/Y');
dd($newDateFormat3);
あなたはCarbon::createFromTimestamp
を使うことができます
BLADE
{{ \Carbon\Carbon::createFromTimestamp($user->from_date)->format('d-m-Y')}}
同様の問題がありました。フォーマットを変更したいのですが、ブレードテンプレートエンジンでもフォーマットを変更できるという柔軟性も必要でした。
したがって、私はモデルを次のように設定します。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
\Carbon\Carbon::setToStringFormat('d-m-Y');
class User extends Model
{
protected $dates = [
'from_date',
];
}
setToStringFormat
は、このモデルにこのフォーマットを使用するようにすべての日付を設定します。
私にとってこれの利点は、私がミューテーターなしで欲しいフォーマットを持つことができるということです。ミューテーターでは、属性が文字列として返されるので、ブレードテンプレートでは次のように書く必要があります。テンプレートのフォーマットを変更したい場合はこれを使用します。
{{ date('Y', strtotime($user->from_date)) }}
それはあまりきれいではありません。
代わりに、属性はCarbonインスタンスとして返されますが、最初に目的の形式で返されます。
つまり、テンプレートには、次のような、わかりやすいコードを記述できます。
{{ $user->from_date->format('Y') }}
Carbonインスタンスを再フォーマットできることに加えて、テンプレート内の属性に対してさまざまなCarbonメソッドを呼び出すこともできます。
おそらくこのアプローチには見落としがあります。他のスクリプトに影響がある場合に備えて、モデルの先頭に文字列フォーマットを指定することはお勧めできません。 私がこれまで見てきたことから、それは起こりませんでした。そのモデルのデフォルトCarbonのみが変更されました。
この例では、Carbonフォーマットを元々モデルスクリプトの一番下にあったものに戻すことをお勧めします。これは固い考えですが、各モデルが独自の形式を持つようにしても構いません。
反対に、モデルごとに同じ形式を使用している場合は、代わりにAppServiceProviderを使用してください。それは単にコードをよりきれいにし、そして維持するのをより簡単にするでしょう。
Laravelでは、app/Helper/helper.phpのように関数を追加できます。
function formatDate($date = '', $format = 'Y-m-d'){
if($date == '' || $date == null)
return;
return date($format,strtotime($date));
}
そしてこのような任意のコントローラ上でこの関数を呼び出します
$start_date = formatDate($start_date,'Y-m-d');
それが役に立てば幸い!
特にLaravelでは、日付形式の変更が正しく機能しないことがあります。だからその場合は、それを使用することをお勧めします:
$date1 = strtr($_REQUEST['date'], '/', '-');
echo date('Y-m-d', strtotime($date1));
そうすれば、 "1970-01-01"のようなエラーを回避することができます!