You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Laravel时间戳格式化函数时末尾空格及月份获取问题

解决Laravel时间戳字段获取月份信息的问题

嘿,我来帮你搞定这个获取月份的问题~Laravel里的时间戳字段(比如你迁移里的created_at和updated_at)默认都会被转换成Carbon日期对象,所以咱们有好几种方式来获取月份信息,分场景给你说明:

1. 从模型实例中直接获取月份

假设你已经通过Eloquent拿到了Post模型实例(比如$post = Post::find(1);),直接调用Carbon的方法就行:

  • 获取数字格式的月份(1到12):
$monthNumber = $post->created_at->month;
// 输出示例:7(如果是7月创建的)
  • 获取英文月份全称(比如January、July):
$monthName = $post->created_at->format('F');
// 输出示例:July
  • 获取英文月份缩写(比如Jan、Jul):
$monthAbbr = $post->created_at->format('M');
// 输出示例:Jul
  • 如果需要中文月份名称,先设置Carbon的本地化:
// 设置为中文 locale
$post->created_at->locale('zh_CN');
$chineseMonth = $post->created_at->monthName;
// 输出示例:七月

2. 在查询时直接提取月份(适合批量数据)

如果要一次性获取所有帖子的月份信息,直接在查询里用SQL函数提取会更高效,不用加载所有模型后再处理:

MySQL 示例:

// 获取数字月份
$posts = Post::select('*', DB::raw('MONTH(created_at) as month_number'))->get();
// 遍历结果时可以直接用 $post->month_number

// 获取英文月份名称
$posts = Post::select('*', DB::raw('MONTHNAME(created_at) as month_name'))->get();

注意事项

如果你遇到无法调用Carbon方法的情况(比如报错Call to a member function month() on string),大概率是模型没有把时间戳字段转换成Carbon对象。这时候检查下Post模型的$casts属性,确保包含时间戳的转换:

// Post.php 模型中
protected $casts = [
    'created_at' => 'datetime',
    'updated_at' => 'datetime',
];

不过Laravel 5.6及以上版本默认已经自动处理了created_at和updated_at的转换,所以这个一般不用额外设置,除非你自定义了其他时间戳字段。

内容的提问来源于stack exchange,提问作者MetalCraneo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:04:25