用json跟踪日期
我正在实现一个Facebook应用程序并使用AJAX / JSON 。
但是,返回的JSON结构的格式为2010-05-30T06:14:00Z
。
我在控制器动作中调用Game.all.to_json
。
如何将它们转换为正常的日期格式?
使用fbjs从服务器端或客户端更容易吗? fbjs有很多bug。
所以我更喜欢使用Server side
的解决方案( Active Records
)。 就像在发送JSON
结构之前转换数据一样。
我将自己的自定义格式添加到我返回的json的方式是将一个猴子补丁添加到ActiveSupport TimeWithZone类。
使用以下内容在config / initializers文件夹中添加文件:
class ActiveSupport::TimeWithZone def as_json(options = {}) strftime('%Y-%m-%d %H:%M:%S') end end
随着时区在所有主流浏览器和ie + +中工作:
class ActiveSupport::TimeWithZone def as_json(options = {}) strftime('%Y/%m/%d %H:%M:%S %z') end end
如果您想使用客户端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; };
如果您需要格式化时间,则需要一些额外的代码。
您可以在模型中覆盖方法as_json:
class Game def as_json(options = {}) super.merge(time: time.strftime('%d.%m.%Y %H:%M:%S')) end end
Rails现在在DateTime
对象上有.as_json
方法。 生活变得更轻松。
在服务器端更容易做到这一点。 您可以使用gsub正则表达式将其放入所需的格式,或者使用time.strftime,然后使用该字符串生成json。
Time.parse < datetime >
simples。