新手问题 Grape 怎么定义 JSON 的默认日期格式

u1450154824 · 2016年04月13日 · 最后由 42thcoder 回复于 2016年04月13日 · 3004 次阅读
"created_at": "2016-04-13T06:01:15.000Z",
"updated_at": "2016-04-13T06:01:15.000Z",

比如我想要 默认是

%Y-%m-%d %H:%M:%S'

应该在什么地方配置吗?

你自己在 model 里重新写方法,把 created_at 的值转换一下格式就行了

和 Grape 无关,Ruby 有格式化的方法 strftime也可以直接给to_s方法打补丁:DATE_FORMATS很多项目在加载环境时,就进行了这一步 Ruby format date string

3 楼 已删除

#2 楼 @cysh 全局的没试过,

#3 楼 @zhaopei

def created_time
    created_at.strftime('%Y-%m-%d %H:%M:%S')
end

这样吗

#2 楼 @cysh 重写 Time 类的 to_s 方法吗?

#6 楼 @u1450154824 DATE_FORMATS是 Rails 的东西,还是用strftime吧…

def created_at
    super.strftime('%Y-%m-%d %H:%M:%S')
  end

这样可以,谢谢各位 #1 楼 @zhaopei #7 楼 @cysh

原来的时间存储里面包括了时区等信息,为何要强行转成其他呢?你数据拿出来的时候再用 strftime 转成想要的格式就行了

哇,美女!

#9 楼 @linyunjiang 因为我用 grape 他返回实例自动转 json 方便一点 #10 楼 @smallx 是抠脚小弟

其实默认格式是一个标准,叫 ISO 8601 使用 API 的人用任何语言的标准库的日期库就能转换出来,还包含时区的。

#5 楼 @u1450154824 那样做,时区就没了,不可取

首先,强烈建议用时间戳; 实在是喜欢字符串格式,也一定要用 iso8601.

Grape 是有内置 data format 的,先定义一个 helper:

module Grape
  class Entity
    format_with(:unix_time) { |dt| dt.to_i }
    format_with(:iso8601) { |dt| dt.iso8601 } 
  end
end

Entity 里面可以这样用:

class Foo < Grape::Entity
  root 'foos', 'foo'

  with_options(format_with: :unix_time) do
    expose :created_at, :updated_at
  end
end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号