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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top