рельсы даты с JSON - PullRequest
       63

рельсы даты с JSON

24 голосов
/ 30 мая 2010

Я реализую приложение Facebook и использую AJAX / JSON .

Однако возвращаемые структуры JSON имеют этот формат 2010-05-30T06:14:00Z.

Я звоню Game.all.to_json в действии контроллера.

Как я могу преобразовать их в обычный формат даты?

Проще ли это сделать изна стороне сервера или на стороне клиента, используя fbjs ?Есть много ошибок с fbjs .

Так что я бы предпочел использовать решение из Server side с использованием (Active Records).Как преобразование данных перед отправкой структур JSON.

Ответы [ 7 ]

47 голосов
/ 30 октября 2010

Я добавил свой собственный пользовательский формат в json, который я возвращал, - добавление обезьяньего патча в класс ActiveSupport TimeWithZone.

Добавление файла в папке config / initializers со следующим содержимым:

class ActiveSupport::TimeWithZone
    def as_json(options = {})
        strftime('%Y-%m-%d %H:%M:%S')
    end
end
7 голосов
/ 06 июня 2012

С часовым поясом, работающим во всех основных браузерах и ie7 +:

class ActiveSupport::TimeWithZone
  def as_json(options = {})
    strftime('%Y/%m/%d %H:%M:%S %z')
  end
end
2 голосов
/ 31 мая 2017

Rails теперь имеет метод .as_json для объекта DateTime. Жизнь стала проще.

2 голосов
/ 17 октября 2014

Вы можете переопределить метод as_json в вашей модели как:

class Game
  def as_json(options = {})
    super.merge(time: time.strftime('%d.%m.%Y %H:%M:%S'))
  end
end
2 голосов
/ 01 апреля 2013

Если вы хотите сделать это с помощью JavaScript на стороне клиента, вы можете проанализировать отдельные даты примерно так:

prettyDate = function(dateString) {
  var day, formatted, jsDate, month;

  jsDate = new Date(dateString);
  day = jsDate.getMonth() + 1 < 10 ? "0" + (jsDate.getMonth() + 1) : "" + (jsDate.getMonth() + 1);
  month = jsDate.getDate() < 10 ? "0" + (jsDate.getDate()) : "" + (jsDate.getDate());

  formatted = "" + day + "/" + month + "/" + (jsDate.getFullYear());
  return formatted;
};

Вам понадобится дополнительный код, если вам, конечно, нужно отформатировать время.

1 голос
/ 21 сентября 2012
Time.parse < datetime >

Simples.

1 голос
/ 08 июня 2010

Определенно проще сделать это на стороне сервера. Вы можете выполнить регулярное выражение gsub, чтобы поместить его в нужный вам формат, или time.strftime, а затем сгенерировать свой json с этой строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...