在 Laravel 中本地化日期格式

Localize date format in Laravel

我将 Laravel 5.2 与 Carbon 一起使用,我试图以语言环境格式获取日期。我的意思是,如果我在数据库中有日期 2015-12-31,我希望根据用户区域设置将其打印为 12/31/201531/12/2015

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

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

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

有一种方法可以使用 Carbon 来做到这一点,但它似乎真的会根据您的服务器规格而有所不同,而不是什么。从阅读来看,语言环境包似乎并不总是一致的。在您的生产服务器终端上使用 locale -a 来检查您安装了哪些受支持的语言环境。如果你需要安装一个,使用sudo locale-gen <NEW LOCALE>.

但是一旦你整理好了语言环境字符串,你似乎可以说

$date = new Carbon;

setlocale('en_GB');

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

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

指定格式为"the preferred date representation based on locale, without the time"

我有解决方案给你。
重写模型中的 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;