Формат даты ActiveRecord - PullRequest
       6

Формат даты ActiveRecord

16 голосов
/ 27 марта 2010

Я столкнулся с проблемой форматов даты в нашем приложении Rails.

У меня есть поле даты в нашем представлении, которое я хочу отформатировать как дд / мм / гг . Именно так пользователь будет ожидать ввода своих дат, и элемент управления datepicker использует этот формат.

Однако, Active Record, похоже, ожидает мм / дд / гг .

Если я введу 01/03/2010 , это будет введено как 03 января 2010 .

Если я введу 25/03/2010 , это будет введено в ноль .

Как заставить ActiveRecord ожидать формат даты Ее Величества?

Ответы [ 3 ]

20 голосов
/ 27 марта 2010

DateTime Rails пытается автоматически определить форматирование. Он обнаружит следующие форматы: mm/dd/yy или dd-mm-yy или yyyy-mm-dd или yyyy/mm/dd. Вы можете сделать обезьяньё исправление DateTime.parse, но я бы предпочел перенести эту проблему в Просмотр вашего приложения.

Я всегда рекомендую использовать yyyy-mm-dd [hh:mm:ss] в качестве строкового представления для даты. Проверьте документацию вашего DatePicker, если он поддерживает несколько форматов даты.

Например, средство выбора даты в jQuery покрыто dateFormat (для данных, отправляемых на сервер, установите значение yyyy-mm-dd), а также altFormat (для ввода, который видит пользователь, установите это к dd/mm/yyyy).

12 голосов
/ 28 марта 2010

Добавить файл с именем rails_defaults.rb в каталог config\initializers; со следующими строками:

Date::DATE_FORMATS[:default] = '%d/%m/%Y'
Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S'

Перезагрузите сервер, и все готово.

2 голосов
/ 13 января 2012
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
...