我正在使用Laravel 5.2和Carbon,我试图以区域设置格式获取日期。我的意思是,如果我在数据库中有日期2015-12-31
,我希望将其打印为12/31/2015
或31/12/2015
取决于用户区域设置。
在User
模型中,我有一个属性locale
,用于显示用户区域设置。但我不知道是谁让它起作用。我知道Laravel使用Carbon作为日期,但在Carbon类中我看到格式Y-m-d
是硬编码的。
我仍然需要将日期保存为Y-m-d
格式,并且只有演示文稿取决于User->locale
属性。
那我怎么能实现这种行为呢?有没有办法用碳本身做到这一点?
答案 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