繁体   English   中英

使用Laravel和Carbon更改日期输出格式

[英]Change date output format, using Laravel and Carbon

MySQL数据库以Ymd H:i:s2000-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的正确方法是通过定义一个访问 :访问者将自动雄辩尝试检索您的字段的值时被调用。 这意味着,你不必遍历一组对象,然后转换值,简单地定义模型中的一个存取 ,你是好去。

解决方案1:

因此,对于您的日期字段,将以下方法添加到您的Orders Model

public function getCreatedAtAttribute($value)
{
    return $value->format('d/m/y H:i a');
}

访问器的名称应为getFieldAttribute ,在其中您将字段替换为相应的列名。 这样,您就不必遍历结果。

注意:切记,这样做后,您现在在模型中不再将created_at作为字符串获取,而不再是Carbon对象,那么这会对您有何影响? 如果您要在其他地方进行比较,也可以使用MutatorAccessors上设置更多字段值, Mutators可以在这里找到https://laravel.com/docs/5.1/eloquent-mutators

解决方案2:

是的,基本上循环遍历所有数组并进行转换。

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_atupdated_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM