2016-06-16 17 views
0

私はLaravel 5.2 with Carbonを使用していますが、ロケール形式で日付を取得しようとしています。私は、データベースに2015-12-31の日付がある場合は、それを12/31/2015または31/12/2015として印刷することをユーザーロケールによって決めることを意味します。Laravelで日付形式をローカライズ

Userモデルでは、ユーザーのロケールを示す属性localeがあります。しかし、私はそれを誰にするかわからない。私はLaravelがCarbonの日付を使用していることを知っていますが、CarbonクラスではY-m-dの形式がハードコードされています。

まだ日付はフォーマットY-m-dに保存され、プレゼンテーションのみがUser->locale属性に依存する必要があります。

どうすればそのような動作を実現できますか? Carbon自体でこれを行う方法はありますか?

答えて

0

Carbonを使用してこれを行う方法がありますが、実際にはサーバーの仕様によって異なります。読書からは、ロケールパッケージが常に一貫しているようには思えません。プロダクションサーバーの端末でlocale -aを使用して、インストールされているサポートされているロケールを確認してください。インストールする必要がある場合は、sudo locale-gen <NEW LOCALE>を使用してください。

しかし、あなたが整理ロケール文字列を持っていたら、それはあなたが私がstrftime()関数から%x修飾子を派生

$date = new Carbon; 

setlocale('en_GB'); 

echo $date->formatLocalized('%x'); // '16/06/16' 

を言うことができるようだ、それは「に基づく一般的な日付表記する形式を指定ロケール、時間なし "the php manual

1

私はあなたのための解決策を持っています。 (魔法__get()を使用して)あなたはいつものように、このフィールドにアクセスできるすべての

$model->finished_at; 

オーバーライド getAttributeモデル内のメソッド

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    use DateFormatting; 

    protected $dates = [ 
     'finished_at', 
     // other field names that you need to format 
    ]; 

    public function getAttribute($key) 
    { 
     if (array_key_exists($key, $this->getDates())) { 
      // here you can format your date 
     } 
     return parent::getAttribute($key); 
    } 

}