格式化 Carbon 日期实例

Posted

技术标签:

【中文标题】格式化 Carbon 日期实例【英文标题】:Formatting a Carbon date instance 【发布时间】:2016-01-29 02:31:37 【问题描述】:

我有一个返回以下日期时间的数组:

$item['created_at'] => "2015-10-28 19:18:44"

如何使用 Carbon 在 Laravel 中将日期更改为 M d Y 格式?

目前它返回错误

$suborder['payment_date'] = $item['created_at']->format('M d Y');

【问题讨论】:

似乎created_at 不包含碳对象的实例。 @Jeemusu 是的,那我怎样才能把它转换成一个呢? 您是在将模型转换为数组吗?因为默认情况下,它是一个 Carbon 实例。 还没有被问到,将created_at 重命名为payment_date 是否有非常特殊的超大规模需要?直接在刀片模板中使用$payment->created_at 并且:created_at 是 Laravel 内部的列,当您在迁移文件中使用 $table->timestamps() 时会自动拥有它。另外,您不应该自行设置。 【参考方案1】:

如果你使用的是 eloquent,就用这个:

$order->created_at->format('D, M d, Y h:i A')

注意:编辑您自己的格式。

【讨论】:

【参考方案2】:

我就是这样做的。它还显示上午/下午。

$user->updated_at->format('M, d Y H:i:s A')

【讨论】:

【参考方案3】:

为您的模型添加 casts 属性

protected $casts = [
'created_at' => 'date', 
'payment_date' => 'date'
];

如果您还想格式化日期时间,只需添加日期时间而不是日期

protected $casts = [
'created_at' => 'datetime',
'payment_date' => 'datetime'
]

【讨论】:

【参考方案4】:

Laravel 6.x 和 7.x 的日期转换

/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
   'created_at' => 'datetime:Y-m-d',
   'updated_at' => 'datetime:Y-m-d',
   'deleted_at' => 'datetime:Y-m-d h:i:s'
];

Laravel 5 很容易在你的模型中添加属性protected $dates = ['created_at', 'cached_at']。在此处查看详细信息https://laravel.com/docs/5.2/eloquent-mutators#date-mutators

日期修改器:Laravel 5.x

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model

   /**
   * The attributes that should be mutated to dates.
   *
   * @var array
   */
   protected $dates = ['created_at', 'updated_at', 'deleted_at'];

您可以像 $user->created_at->format('M d Y');php 支持的任何格式来格式化日期。

【讨论】:

我尝试了这种方法,但是当该字段为空时,它会转换为一个奇怪的日期:'date_confirmation' => string '-0001-11-30 00:00:00' (length=20)。你知道为什么要这样做以及我该如何解决它吗? 这是一种按使用情况的方法。我寻找一种更通用的方法,意味着配置条目和所有Carbon\Carbon 属性的格式相同(我已经使用protected $dates = ['my_date_at'];)。【参考方案5】:

只需使用date()strtotime() 函数即可节省您的时间

$suborder['payment_date'] = date('d-m-Y', strtotime($item['created_at']));

别紧张!!!

【讨论】:

【参考方案6】:

随便用

Carbon::createFromFormat('Y-m-d H:i:s', $item['created_at'])->format('M d Y');

【讨论】:

【参考方案7】:

在模型中声明:

class ModelName extends Model
      

 protected $casts = [
    'created_at' => 'datetime:d/m/Y', // Change your format
    'updated_at' => 'datetime:d/m/Y',
];

【讨论】:

这已经是一个更好的解决方案,因为它是一种基于模型的方法,但有点不完整。对于 Laravel 的内部列 created_atupdated_at,您的 Model 中不需要 protected $dates = [];。但是,如果您有像我这样的自定义列,您可以将它们添加到该数组中,并且不要将 protected $timestamps = true; 添加到您的模型中,因为这是默认值。【参考方案8】:

Laravel 5 时间戳是 Carbon 类的实例,因此您可以直接在时间戳上调用 Carbon 的字符串格式化方法。在你的视图文件中有这样的东西。

$task->created_at->toFormattedDateString()

http://carbon.nesbot.com/docs/#api-formatting

【讨论】:

这仅适用于创建之后 created_at 已添加的记录,例如通过将$table->timestamps() 添加到您的迁移文件中,对于它之前的记录,created_at 将是NULL,然后这将触发有关非对象调用的方法调用的错误。【参考方案9】:
$suborder['payment_date'] = Carbon::parse($item['created_at'])->format('M d Y');

【讨论】:

Payment->created_at 然后重命名为 payment_date 并且不使用直接的 Payment 类(Eloquent 模型),它只允许 array $item 作为类型提示。也许不是你想要的? 我可以问一下为什么我对这个答案投了反对票吗?我刚得到-2,感觉有点不公平,因为我的批评者认为第二好。【参考方案10】:

试试看:

$createdAt = Carbon::parse(date_format($item['created_at'],'d/m/Y H:i:s');
$createdAt= $createdAt->format('M d Y');

【讨论】:

不需要这个,created_at 会自动转换为 Carbon\Carbon,如果 protected $timestamps = false; 设置为 NOT。您的迁移文件中还需要一个$table->timestamps();【参考方案11】:

如果您使用的是 eloquent 模型(通过查看您的代码,我认为您是),您不需要将其转换为数组。只需将其用作对象。因为就像 Thomas Kim 所说,默认情况下它是一个 Carbon 实例

应该是这样的

$suborder['payment_date'] = $item->created_at->format('Y-m-d')

但如果不是这样,您需要将其转换为 Carbon 对象作为 Milan Maharjan 的回答

$createdAt = Carbon::parse($item['created_at']);

【讨论】:

Payment $payment 用法很好,因此无需将其转换为数组,您始终可以在刀片模板中直接使用 Eloquent 模型对象。但我仍然不想将created_at 重命名为payment_date【参考方案12】:

首先将 created_at 字段解析为 Carbon 对象。

$createdAt = Carbon::parse($item['created_at']);

然后就可以使用了

$suborder['payment_date'] = $createdAt->format('M d Y');

【讨论】:

以上是关于格式化 Carbon 日期实例的主要内容,如果未能解决你的问题,请参考以下文章

text 在Laravel中使用Carbon格式化PHP中的日期字符串

在 .blade 模板中使用 Carbon 本地化日期

如何获取由 Carbon::parse() 解析日期时间字符串的格式说明符

如何在Laravel 7中设置全局的Carbon格式?

从 sql 数据库格式化 iso 日期并返回到刀片

Laravel Livewire 绑定模型 Carbon 属性