在Laravel中本地化日期格式

时间:2016-06-16 21:07:41

标签: laravel localization laravel-5.2 php-carbon

我正在使用Laravel 5.2和Carbon,我试图以区域设置格式获取日期。我的意思是,如果我在数据库中有日期2015-12-31,我希望将其打印为12/31/201531/12/2015取决于用户区域设置。

User模型中,我有一个属性locale,用于显示用户区域设置。但我不知道是谁让它起作用。我知道Laravel使用Carbon作为日期,但在Carbon类中我看到格式Y-m-d是硬编码的。

我仍然需要将日期保存为Y-m-d格式,并且只有演示文稿取决于User->locale属性。

那我怎么能实现这种行为呢?有没有办法用碳本身做到这一点?

2 个答案:

答案 0 :(得分:1)

我有解决方案。
覆盖模型中的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);
    }

}

毕竟你可以照常访问这些字段(使用魔术__get()

$model->finished_at;

答案 1 :(得分:0)

有一种方法可以使用Carbon执行此操作,但看起来它确实会根据服务器的规格而有所不同。从阅读来看,似乎语言环境包并不总是一致的。在生产服务器终端上使用locale -a检查已安装的支持的语言环境。如果您需要安装一个,请使用sudo locale-gen <NEW LOCALE>

但是一旦你的语言环境字符串被整理出来,似乎你可以说

$date = new Carbon;

setlocale('en_GB');

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

我从%x函数派生了strftime()修饰符,它根据the php manual