Ruby 1.87 vs 1.92 Date.parse

En Ruby 1.87 je pourrais faire:

Date.parse ("3/21/2011") 

Maintenant dans 1.9.2 je reçois:

ArgumentError: date non valide

Des idées?

Utilisez strptime et donnez un format de temps spécifique.

 ruby-1.9.2-p136 :022 > Date.strptime '03/21/2011', '%m/%d/%Y' => # 

Voir la réponse de michaelmichael pour la raison de cette différence entre les versions de Ruby.

Selon ce rapport de bogue , la possibilité d’parsingr les dates mm/dd/yy été intentionnellement supprimée dans la version 1.9. Le créateur de Ruby, Yukihiro Matsumoto, a déclaré:

Le format “dd / dd / dd” lui-même est très dépendant de la culture et ambigu. Il est aa / mm / jj au Japon (et dans d’autres pays), jj / mm / aaaa dans les pays européens, non? Dans certains cas, vous pouvez leur dire par accident, mais nous ne devrions pas compter sur la chance dans les cas généraux. Je crois que c’est la raison pour laquelle l’parsing de ce format est désactivée dans 1.9.

Comme le suggère hansengel, vous pouvez utiliser Date.strptime place.

J’ai toujours eu du mal à parsingr les dates avec Date.parse . Ma solution est gratifiante de la gemme chronic . J’aime aussi la fonction strptime trouvée dans une autre réponse.

J’aime la gemme american_date pour l’accomplir …

  class << self def parse_with_us_format(date, *args) if date =~ %r{^\d+/\d+/(\d+)$} Date.strptime date, "%m/%d/#{$1.length == 4 || args.first == false ? '%Y' : '%y'}" else parse_without_us_format(date, *args) end end alias_method_chain :parse, :us_format end