elsurudo
elsurudo

Reputation: 3659

Rails jbuilder DateTime adding decimals to second

I'm using JBuilder to render the views of the JSON API part of my application. The problem I'm running into is that my DateTimes are being rendered like this:

"2013-07-02T17:03:18.000Z"

...when what I really want is this:

"2013-07-02T17:03:18Z"

I'm not sure where those decimals are coming from...

I'm rendering the field in the typical JBuilder way:

json.my_datetime_field

I have a date format initializer in my app:

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'

However, this doesn't seem to impact JBuilder, and that is good. I want ISO8601 format coming from my API. I'm on Rails 4.0.0 final, by the way.

Upvotes: 12

Views: 4517

Answers (3)

gabriel vargas
gabriel vargas

Reputation: 21

This work for me.

/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

Upvotes: 1

shao1555
shao1555

Reputation: 126

using under rails? to avoid encode with float, run this method on initialize block on your project

ActiveSupport::JSON::Encoding.time_precision = 0

Upvotes: 11

OneChillDude
OneChillDude

Reputation: 8006

I've experienced this while trying to render a format more amenable to iPhone applications. You could use the .strftime method.

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

will create a json field called my_datetime_field

{ "my_datetime_field": timestamp_goes_here  }

Upvotes: 4

Related Questions