我正在使用Laravel5.2与碳,我试图获得日期的地方格式。我的意思是,如果我在数据库中有日期2015-12-31
,我希望它被打印出来,因为12/31/2015
或31/12/2015
取决于用户区域设置。
在User
模型中,我有一个属性locale
,它显示用户区域设置。但我不知道该由谁来做。我知道拉勒维尔使用碳作为日期,但在碳类中,我看到Y-m-d
格式是硬编码的。
我仍然需要将日期保存为Y-m-d
格式,并且只有演示文稿将取决于User->locale
属性。
那么,我如何才能实现这种行为呢?有什么办法来解决碳本身的问题吗?
发布于 2016-06-16 22:56:42
有一种方法可以使用Carbon
来实现这一点,但是它似乎真的会根据您服务器的规格和其他什么而有所不同。从阅读上看,地区包似乎并不总是一致的。使用生产服务器终端上的locale -a
检查已安装的受支持的区域设置。如果您需要安装一个,请使用sudo locale-gen <NEW LOCALE>
。
但是,一旦你整理好你的地区字符串,你似乎可以说
$date = new Carbon;
setlocale('en_GB');
echo $date->formatLocalized('%x'); // '16/06/16'
我从%x
函数派生出strftime()
修饰符,根据php手册,它指定格式为“基于区域设置的首选日期表示形式,没有时间”。
发布于 2016-06-17 04:13:23
我有解决办法给你。
覆盖模型中的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;
https://stackoverflow.com/questions/37869356
复制相似问题