Формат даты ActiveRecord
-
22-09-2019 - |
Вопрос
Я столкнулся с проблемой форматов дат в нашем приложении Rails.
На наш взгляд, у меня есть поле даты, которое я хочу отформатировать как дд/мм/гг.Именно так пользователь будет вводить свои даты, и элемент управления DatePicker использует этот формат.
Однако Active Record, похоже, ожидает мм/дд/гг.
Если я войду 01/03/2010, это вставляется как 03 января 2010 г..
Если я войду 25/03/2010, это помещается в нулевой.
Как мне заставить ActiveRecord ожидать формат даты Ее Величества?
Решение
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
).
Другие советы
Добавьте файл с именем rails_defaults.rb
к 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("#{$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