在Rails 3中查找操作中格式化日期时间

时间:2011-03-20 17:14:43

标签: ruby-on-rails

我正在寻找一种在find(:all)中格式化日期时间的方法,这样当我用JSON渲染结果时,日期时间将会是

“2011年3月20日”

而不是

“2011-03-20T04:57:50Z”

有没有人有任何建议?感谢。

6 个答案:

答案 0 :(得分:2)

好的,所以你想要很好地呈现JSON格式的结果。不是在路上改变日期的格式,而是在出路时改变它。

class Post

  def formatted_created_at
    created_at.strftime("%b %d, %Y")
  end

  def as_json(args={})
    super(:methods=>:formatted_created_at, :except=>:date)
  end
end

答案 1 :(得分:1)

我会在客户端上使用Date.parse(datestring)来生成一些可用的内容。

答案 2 :(得分:0)

Time.now().strftime("%b %d, %Y)

答案 3 :(得分:0)

在我的头顶,你可以做类似的事情:

@posts = Post.all
@posts.all.each do |x|
  x.date = x.date.strftime("%b %d, %Y")
end
@posts.to_json

答案 4 :(得分:0)

可行(在Rails 3.1中检查),将其放入config / initializer / times_format.js。前两行修复默认时间格式(例如AR created_at)。第三部分是JSON的猴子补丁。

Date::DATE_FORMATS[:default] = "%Y-%m-%d"
Time::DATE_FORMATS[:default] = "%Y-%m-%d %H:%M:%S"

class ActiveSupport::TimeWithZone
  def as_json(options={})
    strftime('%Y-%m-%d %H:%M:%S')
  end
end

答案 5 :(得分:0)

看你用jbuilder?例如index.json.jbuilder

json.array!(@textstrings) do |textstring|
  json.extract! textstring, :id, :text
  json.created_at textstring.created_at.to_formatted_s(:short) 
  json.url textstring_url(textstring, format: :json)
end

在此示例中,我使用方法.to_formatted_s

 json.created_at textstring.created_at.to_formatted_s(:short

我已经

[{"id":1,"text":"liveasda","created_at":"17 Nov 12:48","url":"http://localhost:5555/textstrings/1.json"},{"id":2,"text":"123","created_at":"17 Nov 14:26","url":"http://localhost:5555/textstrings/2.json"},