Formato da Data do ActiveRecord
-
22-09-2019 - |
Pergunta
Eu me deparei com um pouco de incômodo com os formatos de data em nosso aplicativo Rails.
Eu tenho um campo de data em nossa opinião, que quero ser formatado como dd/mm/yy. É assim que o usuário espera inserir suas datas e o controle DatePicker usa esse formato.
No entanto, o registro ativo parece estar esperando mm/dd/yy.
Se eu entrar 01/03/2010, isso é colocado como 03 de janeiro de 2010.
Se eu entrar 25/03/2010, isso é colocado em um nulo.
Como faço para que o ActiveRecord espere o formato de data de suas Majestades?
Solução
O DateTime do Rails tenta detectar a formatação automaticamente. Ele detectará os seguintes formatos: mm/dd/yy
ou dd-mm-yy
ou yyyy-mm-dd
ou yyyy/mm/dd
. Você pode atingir o Monkey DateTime.parse
, mas eu prefiro mudar esse problema para o Visão do seu aplicativo.
Eu sempre recomendo usar yyyy-mm-dd [hh:mm:ss]
como uma representação de string para uma data. Verifique a documentação do seu DatePicker se ele suportar vários formatos de data.
O picker de data do jQuery, por exemplo, tem isso coberto com dateFormat
(Para os dados enviados ao servidor, defina -os como yyyy-mm-dd
) assim como altFormat
(Para a entrada que o usuário vê, defina isso como dd/mm/yyyy
).
Outras dicas
Adicionar um arquivo chamado rails_defaults.rb
para config\initializers
diretório; com as seguintes linhas:
Date::DATE_FORMATS[:default] = '%d/%m/%Y'
Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S'
Reinicie o servidor e você estará pronto.
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