formato della data ActiveRecord
-
22-09-2019 - |
Domanda
ho incontrato un po 'di tempo con i formati di data nella nostra applicazione Rails.
Ho un campo della data, a nostro avviso, che voglio essere formattato come gg / mm / aa . Questo è il modo che l'utente si aspetta di inserire le loro date, ed il controllo DatePicker utilizza questo formato.
Tuttavia, Active Record sembra essere in attesa mm / gg / aa .
Se entro 01/03/2010 , questo viene messo come 3 gennaio 2010 .
Se entro 25/03/2010 , questo viene messo in un nullo .
Come faccio ad avere ActiveRecord aspettarsi sua Maestà formato data?
Soluzione
DateTime Rails' tenta di rilevare automaticamente la formattazione. E 'in grado di rilevare i seguenti formati: mm/dd/yy
o dd-mm-yy
o yyyy-mm-dd
o yyyy/mm/dd
. Si potrebbe scimmia-patch DateTime.parse
, ma avrei preferito passare la questione al Visualizza della tua applicazione.
Io consiglio sempre di usare yyyy-mm-dd [hh:mm:ss]
come una rappresentazione di stringa per una data. Controllare la documentazione del DatePicker se supporta diversi formati di data-.
Il jQuery data-selettore per esempio ha questo coperto di dateFormat
(per i dati che vengono inviati al server, impostare questa yyyy-mm-dd
) così come altFormat
(per l'ingresso che l'utente vede, impostare questo a dd/mm/yyyy
).
Altri suggerimenti
Aggiungi un file chiamato rails_defaults.rb
a config\initializers
directory; con le seguenti linee:
Date::DATE_FORMATS[:default] = '%d/%m/%Y'
Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S'
Riavviare il server e si è pronti per partire.
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