用json跟踪日期

时间:2010-05-30 06:20:58

标签: ruby-on-rails json activerecord

我正在实施 Facebook 应用程序并使用 AJAX / JSON

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

我在控制器操作中调用Game.all.to_json

如何将它们转换为普通日期格式?

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

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

7 个答案:

答案 0 :(得分:47)

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

在config / initializers文件夹中添加一个文件,其中包含以下内容:

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

答案 1 :(得分:7)

随着时区在所有主流浏览器中工作,即7 +:

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

答案 2 :(得分: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;
};

如果您需要格式化时间,则需要一些额外的代码。

答案 3 :(得分:2)

您可以在模型中覆盖方法as_json:

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

答案 4 :(得分:2)

Rails现在在.as_json对象上有DateTime方法。生活变得更轻松。

答案 5 :(得分:1)

在服务器端更容易做到这一点。您可以使用gsub正则表达式将其放入所需的格式,或者使用time.strftime,然后使用该字符串生成json。

答案 6 :(得分:1)

Time.parse < datetime >

simples。