开发者

rails dates with json

开发者 https://www.devze.com 2023-01-01 07:27 出处:网络
I am implementing a Facebook application and using AJAX/JSON. However the JSON structures that are returned have this format 2010-05-30T06:14:00Z.

I am implementing a Facebook application and using AJAX/JSON.

However the JSON structures that are returned have this format 2010-05-30T06:14:00Z.

I'm calling Game.all.to_json in controller action.

How can I convert them to a normal date format?

Is it开发者_如何学JAVA easier to do it from the server side or the client side using fbjs? There are a lot of bugs with fbjs.

So i would prefer using a solution from the Server side using (Active Records). Like converting the data before sending the JSON structures.


The way I added my own custom format to the json I was returning was to add a monkey patch to the ActiveSupport TimeWithZone class.

Add a file in the config/initializers folder with the following contents:

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


With timezone working in all major browsers and ie7+:

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


Rails now has the .as_json method on the DateTime object. Life made easier.


If you want to do this with client-side javascript, you can parse individual dates with something like this:

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;
};

You'll need some additional code if your needing to format time of course.


You can override method as_json in your model as:

class Game
  def as_json(options = {})
    super.merge(time: time.strftime('%d.%m.%Y %H:%M:%S'))
  end
end


Definitely easier to do it on the server side. You can do a gsub regex to put it into the format you want, or a time.strftime, then generating your json with that string.


Time.parse < datetime >

simples.

0

精彩评论

暂无评论...
验证码 换一张
取 消