Laravelビューページで日付形式を変更する


95

データベースから取得する日付形式を変更したい。2016-10-01を取得し{{$user->from_date}}ました。laravel5.3でフォーマット「dmy」を変更したい

{{ $user->from_date->format('d/m/Y')}}

回答:


149

これを試して:

date('d-m-Y', strtotime($user->from_date));

日付をd-m-Y指定した形式に変換します。

注:このソリューションは、phpとそのフレームワークのいずれかで機能する一般的なソリューションです。Laravel固有の方法については、Hamelrajが提供するソリューションを試してください。


2
@ user3386779:動作しますが、最も美しいソリューションではありません:)Laravelにはこのことを行うメカニズムがほとんどありません。私の答えを選択した場合、1つの場所で日付形式を設定する必要があり、表示from_date列が必要になるたびに日付形式を変更することを忘れないでください。
マレクスキバ2016年

@MarekSkiba私は私の答えで同じことを述べました:)
Mayank Pandeyz 2018

例えば変更言語約何- >「ES」ヶ月名の
アルベルト・アクーニャ

1
あなたが使用する必要があります@sadiqに同意する$ user-> from_date->フォーマット( 'D / M / Y')
エリック・ラーション

1
素晴らしく、非常にシンプルなソリューション。
muddasir 2320

129

Laravel使用中のカーボンの良いです

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}

ええ、そして$ user-> from_dateがnull何であるか?
lewis4u

1
@ lewis4uにあなたはNULL値を渡した場合parse(null)、それは現在の日付時刻として変換されます
Hamelraj

1
正解です...それは場合によっては良くありません!だから気をつけろ!
lewis4u

78

モデルセット内:

protected $dates = ['name_field'];

あなたの見解の後:

{{ $user->from_date->format('d/m/Y') }}

動作します


3
これがこれを行うための最も「laravelの方法」だと思うので、これを正解としてマークする必要があります。
CodeChuck

私は、これが最良の方法ですあまりにも同意
JonaPkr

それは私にはうまくいきません。日時列タイプとタイムスタンプ列タイプについては説明しますが、それでもエラーが発生しますCall to a member function format() on null
BariqDharmawan20年

36

あなたはチェックすることができますDate Mutatorshttps//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 }}すると、必要な形式が表示されます。


これがlaravelのより良い方法であることに同意します
limco

1
唯一の欠点は、文字列をビューに返すことです。したがって、同じビューに異なる日付形式を表示する場合は、Carbonで日付を再解析する必要があります。
JustCarty

申し訳ありませんが、これはsetFromDateAttributeの代わりにgetFromDateAttributeを使用するため、ミューテーターです。私は設定ミューテータの用途を知っていて、アクセサの用途は何を得る
Shulz

列がnullの場合、これは現在の日付を返します
BariqDharmawan20年

14

ブレードテンプレートの使いやすい日付は、そのようにカーボンを使用します

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}

11

あなたがすることができる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);

10

方法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 

5

使用できます Carbon::createFromTimestamp

{{ \Carbon\Carbon::createFromTimestamp(strtotime($user->from_date))->format('d-m-Y')}}

4

同様の問題があり、フォーマットを変更したかったのですが、ブレードテンプレートエンジンでもフォーマットを変更できる柔軟性も必要でした。

したがって、モデルを次のように設定します。

<?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で使用してください。これにより、コードがすっきりと維持されやすくなります。


0

特にLaravelでは、日付形式の変更が正しく機能しない場合があります。したがって、その場合は、次を使用することをお勧めします。

$date1 = strtr($_REQUEST['date'], '/', '-');
echo date('Y-m-d', strtotime($date1));

そうすれば「1970-01-01」のようなエラーを回避できます!


これは、phpに関連するlaravelの問題ではありません。これを読んでください:m/d/yまたはd-m-y形式の日付は、さまざまなコンポーネント間の区切り文字を調べることで明確になります。区切り記号がスラッシュの(/)場合、アメリカ人m/d/yが想定されます。一方、区切り文字がダッシュ(-)またはドットの(.)場合は、ヨーロッパd-m-y形式が想定されます。ただし、年が2桁の形式で指定され、区切り文字がダッシュの(-)場合、日付文字列はとして解析されy-m-dます。 php.net/manual/en/function.strtotime.php
MayankPandeyz20年

0

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');

それが役に立てば幸い!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.