Rails jbuilder DateTime将小数添加到秒
Posted
技术标签:
【中文标题】Rails jbuilder DateTime将小数添加到秒【英文标题】:Rails jbuilder DateTime adding decimals to second 【发布时间】:2013-07-01 05:17:08 【问题描述】:我正在使用 JBuilder 来呈现我的应用程序的 JSON API 部分的视图。我遇到的问题是我的 DateTimes 是这样呈现的:
“2013-07-02T17:03:18.000Z”
...当我真正想要的是这样的时候:
“2013-07-02T17:03:18Z”
我不确定这些小数是从哪里来的......
我正在以典型的 JBuilder 方式呈现该字段:
json.my_datetime_field
我的应用中有一个日期格式初始化程序:
Date::DATE_FORMATS[:default] = '%Y/%m/%d %Z'
Time::DATE_FORMATS[:default] = '%Y/%m/%d %H:%M:%S %Z'
Date::DATE_FORMATS[:month_day_year] = '%m-%d-%Y'
不过,这似乎不会影响 JBuilder,这很好。我想要来自我的 API 的 ISO8601 格式。顺便说一句,我在 Rails 4.0.0 final 上。
【问题讨论】:
不确定 JBuilder 的设置,但仅供参考 - ISO8601 中允许小数秒小数。 3 个地方很常见,但 6 或 7 个地方也很常见。 是的,我放弃并更改了客户端解析器的日期格式化程序以允许小数秒。我将把这个问题留在这里,以防有人知道如何实际更改 jbuilder 的输出。我最接近的是猴子修补 DateTime 以使用“as_json”返回我想要的东西,但这似乎真的很hacky。 【参考方案1】:在轨道下使用? 为避免使用浮点编码,请在项目的初始化块上运行此方法
ActiveSupport::JSON::Encoding.time_precision = 0
【讨论】:
【参考方案2】:我在尝试呈现更适合 iPhone 应用程序的格式时遇到过这种情况。您可以使用.strftime
方法。
json.my_datetime_field(object.timestamp.strftime('%Y/%m/%d %H:%M:%S %Z'))
将创建一个名为 my_datetime_field 的 json 字段
"my_datetime_field": timestamp_goes_here
【讨论】:
【参考方案3】:这对我有用。
/view/api/earthquakes/index.json.jbuilder
json.array!(@earthquakes) do |earthquake|
json.extract! earthquake, :id,
:name,
:magnitude,
:lat,
:lon,
:city,
:region,
:state,
:country,
:usgs_id,
:usgs_url,
:usgs_url_detail,
:num_structures
json.date(earthquake.date.strftime('%Y-%m-%d %H:%M:%S %Z'))
end
【讨论】:
以上是关于Rails jbuilder DateTime将小数添加到秒的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Rails 找不到我的 jbuilder 模板或不渲染它?
使用 Jbuilder(或其他)的 Rails JSON API 布局
ruby on rails 4 - 捆绑安装grape-jbuilder