2013-07-03 12 views
9

Sto utilizzando JBuilder per visualizzare le viste dell'API JSON della mia applicazione. Il problema che sto funzionando in è che le mie DateTimes vengono resi in questo modo:Rails jbuilder DateTime aggiungendo decimali al secondo

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

... quando quello che voglio veramente è questo:

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

non sono sicuro di dove quei decimali sono provenienti da ...

sto rendendo il campo nel tipico modo JBuilder:

json.my_datetime_field 

ho un appuntamento formato inizializzatore nella mia 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' 

Tuttavia, questo non sembra avere un impatto JBuilder, e ciò che è buono. Voglio il formato ISO8601 proveniente dalla mia API. A proposito, sono su Rails 4.0.0 final.

+1

Non sono sicuro delle impostazioni di JBuilder, ma FYI - decimali decimali frazionari sono consentiti in ISO8601. 3 posti sono comuni, ma lo sono anche 6 o 7 posti. –

+0

Sì, ho ceduto e modificato il mio formattatore della data del parser sul lato client per consentire i secondi frazionari. Lascerò questa domanda qui se qualcuno sa come modificare effettivamente l'output di jbuilder. Il più vicino a cui sono arrivato è DateTime con patch delle scimmie per restituire quello che voglio con "as_json", ma sembra davvero hacky. – elsurudo

risposta

10

usando sotto le rotaie? per evitare codificare con galleggiante, eseguire questo metodo sul blocco di inizializzazione sul progetto

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

L'ho provato mentre cercavo di rendere un formato più suscettibile alle applicazioni iPhone. È possibile utilizzare il metodo .strftime.

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

creerà un campo JSON chiamato my_datetime_field

{ "my_datetime_field": timestamp_goes_here } 
0

questo lavoro per 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 
Problemi correlati