在 Laravel 中本地化日期格式
Localize date format in Laravel
我将 Laravel 5.2 与 Carbon 一起使用,我试图以语言环境格式获取日期。我的意思是,如果我在数据库中有日期 2015-12-31
,我希望根据用户区域设置将其打印为 12/31/2015
或 31/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;
我将 Laravel 5.2 与 Carbon 一起使用,我试图以语言环境格式获取日期。我的意思是,如果我在数据库中有日期 2015-12-31
,我希望根据用户区域设置将其打印为 12/31/2015
或 31/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
我有解决方案给你。
重写模型中的 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;