2

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

/日期(1294268400000)/

我尝试了 DateTime、to_i、to_json 的各种组合,但从未设法得到这个/Date()/东西。

我是否必须简单地以毫秒为单位获取我的日期,然后手动包装/Date(and )/,或者是否有内置方法?

4

5 回答 5

1

那么(ruby 1.9.x)呢?:

Time.now.strftime("/Date(%s%L)/")
=> "/Date(1335280866211)/"
于 2012-04-24T15:22:51.313 回答
1

你应该试试

new Date(posixMillisecondsHere)

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

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

RFC 4627

2.1。价值观

JSON 值必须是对象、数组、数字或字符串,或以下三个文字名称之一:

 false null true

如果要将日期放入严格认为是 JSON 的内容中,然后将其取出,则必须选择某种使用 JSON 原语(即对象​​、数组、数字、字符串等)的方式对日期进行编码。

如果你想从 JSON 中取回一个日期,那么无论解析你的 JSON 是否必须理解你用来编码日期的约定。

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

于 2012-04-27T15:21:20.030 回答
1

像这样的东西怎么样:

在您的 config/en.yml 文件中:

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

而不是在视图中:

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

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

于 2012-04-29T09:12:46.933 回答
0

看看这个问题:

c# 将 JSON 日期序列化为 ruby

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

于 2012-03-03T21:15:11.713 回答
0

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

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

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

于 2012-04-24T12:13:29.853 回答