无法找到文字月份,追踪数据碳 - laravel

问题描述 投票:2回答:1

我确实尝试了不同的方法,但我没有得到适当的时间格式。

$news->created_at = Carbon::parse($news->created_at)->format('M, d, Y');

$news->created_at = date('d M Y',strtotime($news->created_at))

$news->created_at = date('d M Y',$news->created_at)

$news->created_at = Carbon::createFromFormat("d M Y",strtotime($news->created_at));

$news->created_at = $news->created_at->format('M, d, Y');

错误是,

发现意外数据 找不到分隔符号 InvalidArgumentException

Carbon.php: 910

DD($新闻中心 - > created_at);

Carbon @1550035143 {#361 ▼
  date: 2019-02-13 05:19:03.0 UTC (+00:00)
}
laravel php-carbon
1个回答
1
投票

你已经在$news->created_at字段中有一个Carbon实例,因为Eloquent模型默认考虑created_at and updated_at columns as timestamps并自动将它们转换为Carbon实例。所以你只需要使用Carbon的format方法:

$news->created_at->format('d M Y');

但是,当您尝试在模型实例上将字符串重新分配为created_at的值时,它会与Laravel的内部mutator冲突,该内部mutator尝试将分配给日期字段的任何值从Carbon实例转换为字符串。

您可以在public $timestamps = false;模型中设置News,然后在处理模型时间戳时在整个应用程序中使用字符串,但这似乎是一个黑客而不是解决方案,因为您将放弃Carbon提供的所有好处。

您还可以通过在序列化时处理时间戳来执行此操作,如下所示:

return collect($news->makeHidden(['created_at']))->merge([
    'created_at' => $news->created_at->format('d M Y')
]);

上面的代码将隐藏从序列化过程传递给makeHidden的列。然后,您可以将隐藏列的格式化值合并到响应中。

© www.soinside.com 2019 - 2024. All rights reserved.