Формат даты ActiveRecord
В нашем Rails я столкнулся с форматом даты.
У меня есть поле даты в нашем представлении, которое я хочу отформатировать как dd/mm/yy. Таким образом, пользователь будет ожидать ввода своих дат, а элемент управления datepicker использует этот формат.
Однако активная запись, похоже, ожидает мм/дд/гг.
Если я введу 01/03/2010, он будет помечен как 03 января 2010.
Если я ввешу 25/03/2010, это будет помещено в null.
Как получить ActiveRecord, чтобы ожидать формат даты ее Величества?
Ответы
Ответ 1
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
).
Ответ 2
Добавьте файл с именем rails_defaults.rb
в каталог config\initializers
; со следующими строками:
Date::DATE_FORMATS[:default] = '%d/%m/%Y'
Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S'
Перезагрузите сервер, и вам хорошо идти.
Ответ 3
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