Ruby 1.87 vs 1.92 Date.parse

En Ruby 1.87 pude hacer:

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

Ahora en 1.9.2 me sale:

ArgumentError: fecha inválida

¿Algunas ideas?

Usa strptime y da un formato de tiempo específico.

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

Consulte la respuesta de michaelmichael para conocer la razón de esta diferencia entre las versiones de Ruby.

Según este informe de error , la capacidad de analizar las fechas mm/dd/yy se eliminó intencionalmente en 1.9. El creador de Ruby, Yukihiro Matsumoto dice:

El formato “dd / dd / dd” en sí mismo es muy dependiente de la cultura y es ambiguo. Es yy / mm / dd en Japón (y otros países), mm / dd / aa en los EE. UU., Dd / mm / aa en los países europeos, ¿verdad? En algunos casos, puede decirles por accidente, pero no debemos confiar en la suerte en los casos generales. Creo que esa es la razón por la cual el análisis de este formato está deshabilitado en 1.9.

Como hasengel sugiere, puede usar Date.strptime en Date.strptime lugar.

Siempre he tenido dificultades para analizar las fechas con Date.parse . Mi solución es gratificante de la gem chronic . También me gusta la función strptime encontrada en otra respuesta.

Me gusta la joya american_date para lograr esto …

  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