我很困惑在Laravel 8中使用日期转换(https://laravel.com/docs/8.x/eloquent-mutators#date-casting)。
我需要从DB获得格式为Y-m-d\TH:i:s.vP的所有日期字段;例如:1990-02-12T01:08:12.820+00:00。
为此,在我的Origin模型中,我设置了:
class Origin extends Model
{
protected $casts = [
'myDate' => 'datetime:Y-m-d\TH:i:s.vP'
];
}现在,字段myDate被抛到Carbon
$ php artisan tinker
>>>
>>> $origin = App\Origin::first();
>>>
>>> dd($origin->myDate);
Illuminate\Support\Carbon @634784892^ {#4629
#constructedObjectId: "000000005620d556000000007f71416e"
#localMonthsOverflow: null
#localYearsOverflow: null
#localStrictModeEnabled: null
#localHumanDiffOptions: null
#localToStringFormat: null
#localSerializer: null
#localMacros: null
#localGenericMacros: null
#localFormatFunction: null
#localTranslator: null
#dumpProperties: array:3 [
0 => "date"
1 => "timezone_type"
2 => "timezone"
]
#dumpLocale: null
date: 1990-02-12 01:08:12.820 UTC (+00:00)
}
>>>
>>>但是当我得到属性时,输出不尊重Y-m-d\TH:i:s.vP格式
>>>
>>> echo $origin->myDate;
1990-02-12 01:08:12⏎
>>>
>>>要获得所需的格式,我需要再次格式化:
>>>
>>> echo $origin->myDate->format('Y-m-d\TH:i:s.vP');
1990-02-12T01:08:12.820+00:00⏎
>>>
>>>或者在使用模型toArray()之前转换它:
>>>
>>> echo $origin->toArray()['myDate'];
1990-02-12T01:08:12.820+00:00⏎
>>>
>>>设置日期格式和获得正确输出的最佳实践是什么?我想用:
>>>
>>> echo $origin->myDate;
1990-02-12T01:08:12.820+00:00⏎
>>>
>>>谢谢
发布于 2021-04-29 10:31:30
正如您所说的,laravel铸造格式不起作用,您可以创建这样的访问器
class Origin extends Model
{
protected $casts = [
'myDate' => 'datetime:Y-m-d\TH:i:s.vP'
];
public function getMyDateAttribute($value)
{
return $value->format('Y-m-d\TH:i:s.vP');
}
}它将确保始终返回此格式。
参考链接https://laravel.com/docs/8.x/eloquent-mutators#defining-an-accessor
https://stackoverflow.com/questions/67315442
复制相似问题