(Mi problema es más o menos lo mismo que described in this question, solo que la respuesta no funciona en mi caso.)Rails3/jQuery UI DatePicker - mes y el día se invierten en guardar
estoy usando el jQuery UI Datepicker en una aplicación Rails con un Postgres db. La implementación predeterminada usa un formato de fecha mm/dd/aa para mostrar la fecha seleccionada, que es exactamente lo que quiero. Sin embargo, después de guardar el registro en la base de datos, el mes y el día se invierten; a continuación, se muestra como yy-dd-mm. Por lo tanto, al seleccionar el 3/11/2012 se intenta guardar como el 3 de noviembre en lugar del 11 de marzo, y una fecha como 3/31/2012 no se guarda en absoluto, porque no existe.
He ido abajo de 3 vías diferentes en lo que va tratar de solucionar este problema:
1) primer intento fue volver a formatear el campo de texto para que la pantalla se veía lo que quería:
<%= f.text_field :foo, :value => (@model.foo.blank? ? '' : @model.foo.strftime('%m/%d/%Y')), class: "datepicker" %>
Esta muestra 31/03/2012 correctamente al principio, pero aún se invierte al guardar.
2) A continuación probé cambiando la forma predeterminada en que se almacenan las fechas, pensando que eso solucionaría el problema. Como se describe en la respuesta a this question, añadí lo siguiente para config/lugares/en.yml:
# config/locales/en.yml
en:
date:
formats:
default: "%m/%d/%Y"
Esto no hace ninguna diferencia en absoluto. Siguiente me encontré this question y trató de crear config/inicializadores/date_formats.rb con estas líneas:
Date::DATE_FORMATS[:default]="%m/%d/%Y"
Time::DATE_FORMATS[:default]="%m/%d/%Y %H:%M"
Igual que el anterior, no hay diferencia.
3) Después de jugar con muchas combinaciones, lo único que encontré que DID trabajo era especificar el formato aaaa-mm-dd en mi llamada al plugin datepicker - es lo contrario de lo que quería, pero al menos las fechas se pueden guardar con éxito. Así que la llamada planificador de evento es el siguiente:
$(".datepicker").datepicker({ dateFormat: 'yy-mm-dd' });
Selección 31o marzo, desde el calendario rellena el campo con 2012-03-31, y todavía se muestra como 2012-03-31 después de guardar.
Pero, ¿cómo demonios puedo hacer que el marcador de fecha funcione con un formato mm/dd/aa? No me puedo imaginar que sea algo difícil de hacer, pero ¿qué me estoy perdiendo? ¿Tengo que hacer algo con la forma en que se almacenan las fechas en Postgres? (Se especifican como date, not datetime.)
Para detener golpear la cabeza contra la pared sobre esto, Acabo de cambiar mis campos a 'texto' en lugar de 'fecha'. No es ideal, pero resuelve el problema de forma bastante simple. – ellawren
algunas veces el cambio es una buena solución sea ideal o no. pero aún por curiosidad puede querer saber el problema, puede ser más tarde. –
Rails 3.2.3, Postgresql y Ruby 1.9.3. Tenía el formato datepicker configurado en mm-dd-yy y estaba funcionando por un tiempo, pero estoy pasando por una refactorización y puedo guardar algunas fechas sin problemas, pero una fecha en particular ya no se guarda. Así que voy a volver a formatear a yy-mm-dd y veré qué sucede. – thomasvermaak