web-dev-qa-db-fra.com

Rails 3 format datetime par défaut sans UTC

Je crée une nouvelle application Rails 3, et j'utilise DateTime pour quelques champs, mais chaque norme de champ datetime a UTC derrière (dans une vue) , comme:

2010-10-10 16:19:00 UTC

Comment puis-je me débarrasser de la partie UTC?

MISE À JOUR: voici ce que j'ai jusqu'à présent:

<%= trip.truckleft.strftime("%Y-%m-%d %H:%M") %>

Donc, tout ce que j'ai à faire maintenant est de mettre cela dans une aide, mais n'y a-t-il pas une meilleure façon plus universelle?

J'ai regardé d'autres articles, qui suggéraient de créer un time_formats.rb dans les initialiseurs, mais je n'ai pas réussi à le faire.

Merci pour votre aide, très appréciée!

47
Paintrick

Une autre façon - peut-être maintenant préférée - est d'utiliser prise en charge de l'internationalisation et de la localisation de Rails . Il y a beaucoup à apprendre dans ce guide, donc la version tl; dr est la suivante:

<%= l trip.truckleft, :format => :long %>

Il existe quelques formats de date et d'heure prédéfinis comme :long déjà disponible pour l'anglais, et vous pouvez ajouter le vôtre dans config/locales/en.yml en suivant la structure YAML dans ces exemples. Si vous ne vous lancez pas encore dans l'ensemble de l'i18n/l10n et que vous regardez la méthode l tout le temps est déroutant, vous pouvez également utiliser:

<%= trip.truckleft.to_formatted_s(:long) %>
65
ches

Voici ce qui a finalement fonctionné pour moi:

J'ai créé un nouveau fichier dans:

config/initializers/

nommé: time_formats.rb

et l'a ajouté à ce fichier:

Time::DATE_FORMATS[:default] = "%Y-%m-%d %H:%M"

Ensuite, j'ai enregistré, redémarré le serveur et cela a commencé à fonctionner.

42
Paintrick

J'utilise i18n pour formater mes dates et les avoir dans en.yml:

date:
  formats:
    default: "%m/%d/%Y"

Je voulais réutiliser ce format pour la façon dont les modèles affichent leurs dates, donc ma config/initializers/time_formats.rb contient ceci:

Date::DATE_FORMATS[:default] = lambda { |date| I18n.l(date) }
26
jankubr

Pour être exact, vous devez les mettre dans vos initialiseurs:

Date::DATE_FORMATS[:default] = "%m-%d-%Y"
Time::DATE_FORMATS[:default] = "%m-%d-%Y %H:%M"

Lorsque vous avez datetime, le second fonctionnera (par exemple: created_at for dans les modèles).

14
Łukasz Anwajler

pour Rails 3

ajouter à config/environment.rb

my_datetime_formats = { :default => '%F %T' } #or any other you like
my_date_formats = { :default => '%F' } #or any other you like

Time::DATE_FORMATS.merge!(my_datetime_formats)
Date::DATE_FORMATS.merge!(my_date_formats)

(la différence par rapport aux autres réponses - est merge! méthode)

1
okliv

Vous pouvez mettre la ligne suivante à la fin de votre config/environment.rb fichier:

Date::DATE_FORMATS[:default] = "%Y-%m-%d %H:%M"
1
Daniel O'Hara