И 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