データベースから取得する日付形式を変更したい。2016-10-01を取得し{{$user->from_date}}
ました。laravel5.3でフォーマット「dmy」を変更したい
{{ $user->from_date->format('d/m/Y')}}
データベースから取得する日付形式を変更したい。2016-10-01を取得し{{$user->from_date}}
ました。laravel5.3でフォーマット「dmy」を変更したい
{{ $user->from_date->format('d/m/Y')}}
回答:
これを試して:
date('d-m-Y', strtotime($user->from_date));
日付をd-m-Y
指定した形式に変換します。
注:このソリューションは、phpとそのフレームワークのいずれかで機能する一般的なソリューションです。Laravel固有の方法については、Hamelrajが提供するソリューションを試してください。
モデルセット内:
protected $dates = ['name_field'];
あなたの見解の後:
{{ $user->from_date->format('d/m/Y') }}
動作します
Call to a member function format() on null
あなたはチェックすることができますDate Mutators
:https://laravel.com/docs/5.3/eloquent-mutators#date-mutators
配列のUser
モデル列from_date
に設定する必要があります。$dates
その後、で形式を変更できます。$dateFormat
別のオプションも、このメソッドをUser
モデルに適用します。
public function getFromDateAttribute($value) {
return \Carbon\Carbon::parse($value)->format('d-m-Y');
}
実行{{ $user->from_date }}
すると、必要な形式が表示されます。
ブレードテンプレートの使いやすい日付は、そのようにカーボンを使用します
{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
あなたがすることができる3つの方法があります:
1)Laravelモデルの使用
$user = \App\User::find(1);
$newDateFormat = $user->created_at->format('d/m/Y');
dd($newDateFormat);
2)PHPstrtotimeの使用
$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);
方法1:
strtotime()
日付を指定された形式に変更するには、totimeを使用するのが最適な形式です。
strtotime()
-英語のテキストによる日時の説明をUnixタイムスタンプに解析します
この関数は、英語の日付形式を含む文字列が指定されることを想定しており、現在指定されているタイムスタンプと比較して、その形式をUnixタイムスタンプ(1970年1月1日00:00:00 UTCからの秒数)に解析しようとします。現在の時刻が指定されていない場合。
例:
<?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
同様の問題があり、フォーマットを変更したかったのですが、ブレードテンプレートエンジンでもフォーマットを変更できる柔軟性も必要でした。
したがって、モデルを次のように設定します。
<?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では、日付形式の変更が正しく機能しない場合があります。したがって、その場合は、次を使用することをお勧めします。
$date1 = strtr($_REQUEST['date'], '/', '-');
echo date('Y-m-d', strtotime($date1));
そうすれば「1970-01-01」のようなエラーを回避できます!
m/d/y
またはd-m-y
形式の日付は、さまざまなコンポーネント間の区切り文字を調べることで明確になります。区切り記号がスラッシュの(/)
場合、アメリカ人m/d/y
が想定されます。一方、区切り文字がダッシュ(-)
またはドットの(.)
場合は、ヨーロッパd-m-y
形式が想定されます。ただし、年が2桁の形式で指定され、区切り文字がダッシュの(-)
場合、日付文字列はとして解析されy-m-d
ます。 php.net/manual/en/function.strtotime.php
from_date
列が必要になるたびに日付形式を変更することを忘れないでください。