Как отформатировать дату в JSON в Rails? - PullRequest
2 голосов
/ 04 марта 2012

Мне нужно создать дату в Rails, которая выглядит следующим образом:

/ Дата (1294268400000) /

Я пробовал различные комбинации DateTime, to_i, to_json, но так и не смог получить вещь /Date()/.

Нужно ли просто получить дату в мс, а затем вручную обернуть /Date( и )/, или есть встроенный метод?

Ответы [ 5 ]

1 голос
/ 29 апреля 2012

Что примерно так:

в вашем файле config / en.yml:

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

, а затем в представлении:

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

Обратите вниманиечто вам потребуется доступ к помощникам в методе, который отображает JSON.Поэтому он не будет работать, если вы используете метод ActiveRecord # to_json для генерации jsons.

1 голос
/ 27 апреля 2012

Вы должны сначала попробовать

new Date(posixMillisecondsHere)

. MDN говорит, что вызов функции Date вне контекста конструктора (т. Е. Без new) всегда будет возвращать строку, содержащую отформатированную дату, а не объект Date.

Строго говоря, когда вы это делаете, вы пишете JavaScript, а не JSON.JSON не может содержать объекты Date.

RFC 4627 говорит

2.1.Значения

Значение JSON ДОЛЖНО быть объектом, массивом, числом или строкой или одним из следующих трех литеральных имен:

 false null true

Если вы хотите указать датув то, что строго считается JSON, а затем возвращает его обратно, вы должны выбрать какой-либо способ использования примитивов JSON (то есть объектов, массивов, чисел, строк и т. д.) для кодирования даты.

Есливы хотите вернуть Date из JSON, и все, что разбирает ваш JSON, должно понимать соглашение, которое вы использовали для кодирования Date.

Надеюсь, что это достаточно достоверно и / или официально, чтобы помочь.

1 голос
/ 24 апреля 2012

Как насчет (ruby 1.9.x)?:

Time.now.strftime("/Date(%s%L)/")
=> "/Date(1335280866211)/"
0 голосов
/ 24 апреля 2012

Это эпоха UNIX (секунд с 1970-01-01), верно?Как насчет использования DateTime # strftime метода?

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

ОБНОВЛЕНИЕ : ОК, это миллисекунды, согласно документации, которую вы можете использовать your_date.strftime("%Q"), чтобы получить мс(но я еще не пробовал).

0 голосов
/ 04 марта 2012

Проверьте этот вопрос:

c # сериализует дату JSON в ruby ​​

... кажется, что простой ответ - создать метод parse_date.

...