И ActiveRecord формат даты

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

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

однако Active Record, похоже, ожидает mm/dd / yy.

Если я ввожу 01/03/2010 это получает положить в как 03 января 2010.

Если я ввожу 25/03/2010, это было в null.

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

3 ответов


Rails' DateTime пытается автоматически определить форматирование. Он обнаружит следующие форматы: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).


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

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

перезагрузить сервер и вы хорошо идти.


class Date
  class << self
    def _parse_with_us_format(date, *args)
      if date =~ %r{^(\d+)/(\d+)/(\d+)$}
        _parse_without_us_format("#{.length == 2 ? "20#{}" : }-#{}-#{}", *args)
      else
        _parse_without_us_format(date, *args)
      end
    end
    alias_method_chain :_parse, :us_format
  end
end