[英]Change date output format, using Laravel and Carbon
MySQL数据库以Ymd H:i:s
即2000-12-32 00:00:00
格式,UTC)存储时间。
我想知道是否有某种方法可以转换从数据库返回的$order
对象上的created_at dateTime属性,因此它会像这样发送dateTime
字符串给客户端: 31/04/16 14:25pm
并且没有秒。
for($i = 0; $i < sizeof($orders); $i++ ) {
$orders[$i]->created_at = $orders[$i]->created_at->format('d/m/y H:i');
}
这样使用Laravel的正确方法是通过定义一个访问 :访问者将自动雄辩尝试检索您的字段的值时被调用。 这意味着,你不必遍历一组对象,然后转换值,简单地定义模型中的一个存取 ,你是好去。
因此,对于您的日期字段,将以下方法添加到您的Orders Model
public function getCreatedAtAttribute($value)
{
return $value->format('d/m/y H:i a');
}
访问器的名称应为getFieldAttribute
,在其中您将字段替换为相应的列名。 这样,您就不必遍历结果。
注意:切记,这样做后,您现在在模型中不再将created_at作为字符串获取,而不再是Carbon对象,那么这会对您有何影响? 如果您要在其他地方进行比较,也可以使用Mutator在Accessors上设置更多字段值, Mutators可以在这里找到https://laravel.com/docs/5.1/eloquent-mutators
是的,基本上循环遍历所有数组并进行转换。
for($i = 0; $i < count($orders); $i++ ) {
$orders[$i]->created_at = $orders[$i]->created_at->format('d/m/y H:i a');
}
如果遇到诸如“找不到分隔符”或“找到意外数据”之类的错误。 调整这样的解决方案:
解决方案1:
public function getCreatedAtAttribute($value)
{
return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $value->toDateTimeString())->format('d/m/y H:i a');
}
解决方案2:
for($i = 0; $i < count($orders); $i++ ) {
$orders[$i]->created_at = Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $orders[$i]->created_at->toDateTimeString())->format('d/m/y H:i a');
}
是的,您可以在时间格式化created_
foreach($orders as $order){
echo $order->created_at->format('d/m/y H:i a');
}
假设$orders
是一个雄辩的模型,则created_at
和updated_at
属性将自动转换为carbon实例,因此您已经可以在它们上运行carbon方法。
请参阅有关此主题的文档: https : //laravel.com/docs/5.2/eloquent-mutators#date-mutators
因此,您的代码:
$orders[$i]->created_at->format('d/m/y H:i');
应该工作正常!
您总是可以在Order
模型中添加一个辅助方法,使其也更具可读性,如下所示:
public function createdAtTimeStamp()
{
return $this->created_at->format('d/m/y H:i');
}
然后您可以像这样访问它:
$orders[$i]->createdAtTimeStamp()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.