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 5 API模式一起工作

使用 Jbuilder(或其他)的 Rails JSON API 布局

ruby on rails 4 - 捆绑安装grape-jbuilder

如何使用 Jbuilder & Rails 生成自定义 json 响应

rails jbuilder - 只是一个字符串数组