如何在Rails中将日期格式化为JSON?

时间:2012-03-03 21:00:39

标签: ruby-on-rails json date-formatting

我需要在Rails中生成一个如下所示的日期:

/日期(1294268400000)/

我尝试过DateTime,to_i,to_json的各种组合,但从未设法获得/Date()/

我是否必须简单地以ms为单位获取日期,然后手动换行/Date()/,还是有内置方法?

5 个答案:

答案 0 :(得分:1)

(红宝石1.9.x)怎么样?:

Time.now.strftime("/Date(%s%L)/")
=> "/Date(1335280866211)/"

答案 1 :(得分:1)

你应该试试

new Date(posixMillisecondsHere)

第一。 MDN表示在构造函数上下文之外调用Date函数(即没有new)将始终返回包含格式化日期而不是Date对象的字符串。

严格地说,当你这样做时,你正在编写JavaScript而不是JSON。 JSON不能包含Date对象。

RFC 4627

  

2.1。值

     

JSON值必须是对象,数组,数字或字符串,或者是其中之一     以下三个字面名称:

 false null true

如果你想把Date放到严格认为是JSON的东西然后把它取回来,你必须选择一些方法来使用JSON原语(对象,数组,数字,字符串等)进行编码一个约会。

如果你想从JSON中获取一个Date,那么你的JSON必须理解你用来编码Date的约定。

希望这些是可信的和/或官方足以提供帮助。

答案 2 :(得分:1)

这样的事情:

在config / en.yml文件中

en:
  time:
    formats:
      json: "/Date(%s%L)/"

而不是在视图中:

<%= l(Time.now, :format => :json) %>

请注意,您需要在呈现json的方法中访问帮助程序。因此,如果使用ActiveRecord#to_json方法生成jsons,它将无法工作。

答案 3 :(得分:0)

看看这个问题:

c# serialized JSON date to ruby

...简单的答案似乎是创建一个parse_date方法。

答案 4 :(得分:0)

这是UNIX纪元(自1970-01-01以来的秒数)对吗?使用DateTime#strftime方法怎么样?

# Taken from the Ruby documentation
seconds_since_1970 = your_date.strftime("%s")

UPDATE :好的,这是毫秒,根据您可以使用your_date.strftime("%Q")获取ms的文档(但我还没有尝试过)。