format de date ActiveRecord
-
22-09-2019 - |
Question
J'ai couru dans un endroit de la peine avec les formats de date dans notre application Rails.
J'ai un champ de date à notre avis que je veux être formaté comme jj / mm / aa . Voici comment l'utilisateur attend d'entrer leurs dates, et le contrôle DatePicker utilise ce format.
Cependant, Active Record semble attendre mm / jj / aa .
Si j'entre 01/03/2010 , cela devient mis en 03 Janvier 2010 .
Si j'entre 25/03/2010 , cela devient mis dans un null .
Comment puis-je ActiveRecord attendre Son format de date Majestés?
La solution
La DateTime Rails essaie de détecter automatiquement la mise en forme. Il détecte les formats suivants: mm/dd/yy
ou dd-mm-yy
ou yyyy-mm-dd
ou yyyy/mm/dd
. Vous pourriez DateTime.parse
singe-patch, mais je préférerais passer cette question à la Afficher de votre application.
Je recommande toujours d'utiliser yyyy-mm-dd [hh:mm:ss]
comme une représentation de chaîne pour une date. Consultez la documentation de votre DatePicker si elle prend en charge plusieurs formats dattiers.
La jQuery dattier par exemple a ce couvert de dateFormat
(pour les données qui sont envoyées au serveur, réglez ce paramètre yyyy-mm-dd
) ainsi que altFormat
(pour l'entrée que l'utilisateur voit, réglez ce paramètre dd/mm/yyyy
).
Autres conseils
Ajouter un fichier appelé rails_defaults.rb
à config\initializers
répertoire; avec des lignes suivantes:
Date::DATE_FORMATS[:default] = '%d/%m/%Y'
Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S'
Redémarrez le serveur et vous êtes bon pour aller.
class Date
class << self
def _parse_with_us_format(date, *args)
if date =~ %r{^(\d+)/(\d+)/(\d+)$}
_parse_without_us_format("#{$3.length == 2 ? "20#{$3}" : $3}-#{$1}-#{$2}", *args)
else
_parse_without_us_format(date, *args)
end
end
alias_method_chain :_parse, :us_format
end
end