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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top