2010-05-30 60 views
24

我正在实施一个Facebook应用程序和使用AJAX/JSON与JSON的导轨日期

但是,JSON返回的结构具有此格式2010-05-30T06:14:00Z

我打电话给Game.all.to_json控制器操作。

如何将它们转换为正常的日期格式?

从服务器端或客户端使用fbjs更容易吗? 有很多错误fbjs

所以我宁愿使用Server side使用(Active Records)的解决方案。就像在发送JSON结构之前转换数据一样。

+0

这工作:http://stackoverflow.com/questions/5370061/format-date-time-in-find-operation-in-rails-3/7479550#7479550 – hipertracker 2011-09-20 02:59:44

回答

47

我将我自己的自定义格式添加到我返回的json的方式是将一个猴子补丁添加到ActiveSupport TimeWithZone类。

在config /初始化文件夹中添加一个文件,其内容如下:

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

这对我很好,但现在我' m试图为Date对象做类似的事情(使用date_select返回)。我尝试用ActiveSupport :: Date取代ActiveSupport :: TimeWithZone,但没有喜悦。任何帮助,将不胜感激。谢谢。 – Snips 2011-02-02 11:37:06

+3

为时区添加%z可能会有所帮助。 – tbeseda 2011-02-18 18:45:18

+0

@Geekygecko我upvoted你的答案。我使用这种方法,它适用于与模型相关的日期时间字段,而不适用于带有联接的AREL查询中其他表的日期时间字段。 – GeorgeW 2012-10-27 02:17:48

1

绝对容易在服务器端做到这一点。你可以做一个gsub正则表达式把它放入你想要的格式,或者一个time.strftime,然后用这个字符串生成你的json。

7

随着时区的所有主要浏览器和IE7 +工作:

class ActiveSupport::TimeWithZone 
    def as_json(options = {}) 
    strftime('%Y/%m/%d %H:%M:%S %z') 
    end 
end 
1
Time.parse <datetime> 

simples。

2

如果你想与客户端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; 
}; 

你需要一些额外的代码,如果你需要格式化,当然时间。

2

您可以在模型中重写方法as_json为:

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

的Rails现在有DateTime对象的.as_json方法。生活变得更容易。