formato de fecha ActiveRecord
-
22-09-2019 - |
Pregunta
Me he encontrado un lugar de molestarse con los formatos de fecha en nuestra aplicación Rails.
Tengo un campo de fecha en nuestra opinión, que yo quiero tener formato de dd / mm / aa . Esta es la forma en que el usuario va a esperar para entrar en sus fechas, y el control selector de fecha utiliza este formato.
Sin embargo, Active Record parece estar esperando dd / mm / aa .
Si entro 01/03/2010 , esto se puso como 03 de enero de de 2010 .
Si entro 25/03/2010 , esto se puso en un nula .
¿Cómo llego a esperar ActiveRecord Su formato de fecha Majestades?
Solución
Fecha y hora de Rails intenta detectar automáticamente el formato. Se detectará los siguientes formatos: mm/dd/yy
o dd-mm-yy
o yyyy-mm-dd
o yyyy/mm/dd
. Usted podría DateTime.parse
mono-parche, pero preferiría mover este tema a la Ver de su aplicación.
Siempre recomiendo usar yyyy-mm-dd [hh:mm:ss]
como una representación de cadena de una fecha. Consulte la documentación de su DatePicker si es compatible con múltiples formatos de fecha-.
El selector de fecha jQuery por ejemplo, ha esta cubierta con dateFormat
(para los datos que se envían al servidor, active esta yyyy-mm-dd
), así como altFormat
(para la entrada que ve el usuario, establecer este a dd/mm/yyyy
).
Otros consejos
Añadir un archivo llamado rails_defaults.rb
al directorio config\initializers
; con las siguientes líneas:
Date::DATE_FORMATS[:default] = '%d/%m/%Y'
Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S'
Reiniciar el servidor y que son buenos para ir.
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