2013-07-03 5 views
9

J'utilise JBuilder pour afficher les vues de l'API JSON de mon application. Le problème que je suis en cours d'exécution en est que mes DateTimes sont rendus comme ceci:Rails jbuilder DateTime ajoutant des décimales à la seconde

« 2013-07-02T17: 03: 18.000Z »

... quand ce que je veux vraiment est la suivante:

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

Je ne sais pas où ces décimales viennent ...

Je rend le champ de la manière typique JBuilder:

json.my_datetime_field 

J'ai un format de date initialiseur dans mon application:

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' 

Cependant, cela ne semble pas avoir un impact JBuilder, et ce qui est bon. Je veux que le format ISO8601 provienne de mon API. Je suis sur Rails 4.0.0 final, en passant.

+1

Je ne sais pas sur les paramètres de JBuilder, mais FYI - deuxième décimales fractionnaires sont autorisés dans ISO8601. 3 places sont communes, mais il en existe 6 ou 7. –

+0

Ouais, j'ai cédé et changé le formateur de date de mon analyseur côté client pour permettre des secondes fractionnaires. Je vais laisser cette question ici au cas où quelqu'un sait comment changer la sortie de jbuilder. Le plus proche que je sois est le patch de singe DateTime pour retourner ce que je veux avec "as_json", mais cela semble vraiment hacky. – elsurudo

Répondre

10

à l'aide sous les rails? pour éviter encode avec flotteur, lancez cette méthode sur le bloc initialize sur votre projet

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

Je l'ai expérimenté en essayant de rendre un format plus compatible avec les applications iPhone. Vous pouvez utiliser la méthode .strftime.

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

va créer un champ JSON appelé my_datetime_field

{ "my_datetime_field": timestamp_goes_here } 
0

Ce travail pour moi.

/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