2009-07-31 11 views
2

nous travaillons actuellement sur un projet de rails qui utilise i18n et nous avons petit problème avec les dates:rails problème date i18n

# on my mac 
"10.06.2008".to_date 
# produces => Tue, 10 Jun 2008 

# on a friends mac and on the production server 
"10.06.2008".to_date 
# produces => ..., 06 Oct 2008 

Comme vous pouvez voir les dates ne sont pas bonnes. Nous avons tout vérifié. Le fichier locale.yml (de.yml) fonctionne correctement sur les deux systèmes et le fichier default_locale est également défini. La seule différence entre nos systèmes est la version ruby. Je cours Ruby 1.8.7 et il fonctionne 1.8.6. Cela peut-il être la raison de ce comportement?

Toute aide serait appréciée.

Répondre

11

Oui, la version Ruby fait la différence. String#to_date appelle Date._parse en interne, ce qui renvoie des résultats différents pour Ruby 1.8.6 et 1.8.7.

1.8.7:

require "date" 
Date._parse("10.06.2008") 
#=> {:year=>2008, :mday=>10, :mon=>6} 

1.8.6:

Date._parse("10.06.2008") 
#=> {:mday=>6, :mon=>10, :year=>2008} 

Le change log for 1.8.7 mentionne un changement des dates sont ainsi analysées:

Date.parse: '##. ##. ##' (où chaque '#' est un chiffre) est maintenant pris comme 'YY.MM.DD' au lieu de 'MM.DD.YY'. Bien que la modification puisse vous perturber, vous pouvez utiliser toujours avec Date.strptime() lorsque vous savez de quoi vous faites affaire avec .

Même si la version à quatre chiffres de votre exemple n'est pas explicitement mentionnée, le même changement entraîne probablement la différence. La solution de contournement serait d'utiliser Date.strptime.

+0

Très complet, avec une explication claire et une suggestion claire. Bien joué, molf. +1 –