【问题标题】:Localize date format in Laravel在 Laravel 中本地化日期格式
【发布时间】:2016-06-17 12:13:23
【问题描述】:

我正在使用带有 Carbon 的 Laravel 5.2,并尝试获取语言环境格式的日期。我的意思是,如果我在数据库中有日期 2015-12-31,我希望它打印为 12/31/2015 或 31/12/2015 取决于用户区域设置。

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

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

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

【问题讨论】:

    标签: laravel localization laravel-5.2 php-carbon


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

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

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

      $date = new Carbon;
      
      setlocale('en_GB');
      
      echo $date->formatLocalized('%x'); // '16/06/16'
      

      我从strftime()函数派生了%x修饰符,它根据the php manual将格式指定为“基于区域设置的首选日期表示,没有时间”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多