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

如何通过Serializer将last_date转换为February 02,2023格式?

问题:Serializer格式化last_date为February 02,2023格式无效

当前接口返回的数据结构:

"category": {
    "data": {
        "id": "81",
        "attributes": {
            "id": 81,
            "name": "ggg",
            "last_date": "2023-02-22",
            "created_at": "2023-02-15T13:01:53.341+05:30",
            "updated_at": "2023-02-15T13:01:53.341+05:30"
        }
    }
}

尝试在Serializer中添加以下代码,但未生效:

attribute :last_date do |object|
    object.last_date&.to_s(:date)
end

解决方案

1. 先定义全局日期格式

如果你的Rails项目里没定义:date这个自定义格式,to_s(:date)自然不会生效。需要在config/initializers/time_formats.rb中添加:

Time::DATE_FORMATS[:date] = "%B %d,%Y"
Date::DATE_FORMATS[:date] = "%B %d,%Y"

添加后重启服务,原代码即可生效。

2. 直接在Serializer内指定格式化规则

不想全局定义的话,直接在Serializer的字段块里用strftime格式化:

attribute :last_date do |object|
  object.last_date&.strftime("%B %d,%Y")
end

参数说明:

  • %B:输出完整月份名称(如February)
  • %d:输出两位数字日期(如02)
  • %Y:输出四位数字年份(如2023)

3. 排查字段覆盖问题

检查当前Serializer是否继承了父类Serializer,或者有没有其他代码重写了last_date字段,导致自定义逻辑被覆盖。

4. 处理字符串类型的日期

如果last_date存储的是字符串而非Date/Time对象,需要先转成日期再格式化:

attribute :last_date do |object|
  if object.last_date.present?
    Date.parse(object.last_date).strftime("%B %d,%Y")
  end
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:01:01