2013-07-03 26 views
9

我正在使用JBuilder呈現我的應用程序的JSON API部分的視圖。我遇到的問題是,我的DateTime是否正在呈現:Rails jbuilder DateTime將小數添加到第二個

「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的,那就是好的。我希望ISO8601格式來自我的API。順便說一下,我最終在Rails 4.0.0上。

+1

不確定JBuilder的設置,但僅供參考 - 在ISO8601中允許使用小數部分小數。 3個地方很常見,但6個或7個地方也是如此。 –

+0

是的,我放下並更改了我的客戶端解析器的日期格式化程序,以允許小數秒。我會在這裏留下這個問題,以防有人知道如何改變jbuilder的輸出。我來的最接近的是猴子補丁DateTime,以「as_json」的形式返回我想要的內容,但這看起來真的很黑。 – elsurudo

回答

10

? 避免編碼與浮動,您的項目

ActiveSupport::JSON::Encoding.time_precision = 0 
4

我在試圖呈現更適合iPhone應用程序的格式時遇到過這種情況。您可以使用.strftime方法。

json.my_datetime_field(object.timestamp.strftime('%Y/%m/%d %H:%M:%S %Z')) 

將創建一個名爲JSON場使用下軌my_datetime_field

{ "my_datetime_field": timestamp_goes_here } 
0

這項工作對我來說運行初始化塊這種方法。

/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