Вопрос

Я столкнулся с проблемой форматов дат в нашем приложении 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top