Формат даты в Rails в текстовом поле - PullRequest
43 голосов
/ 20 сентября 2009

У меня есть форма рельсов, которая отображает дату в текстовом поле:

<%= form.text_field :check_in_date  %>

Дата отображается как yyyy-mm-dd

Я пытаюсь выяснить, как сделать так, чтобы оно отображалось как mm-dd-yyyy

Я пытался добавить этот конфиг, но он не работал.

ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(
  :default => '%m/%d/%Y'
)

Ответы [ 14 ]

0 голосов
/ 29 декабря 2018

Небольшое улучшение в ответе Тома Россиса - использование метода I18n.localize, поэтому по умолчанию в текущей локали пользователя всегда будет:

initializers/date_time_i18n_formatter.rb

Date::DATE_FORMATS[:default] = ->(date) { I18n.localize date, format: :default }
Time::DATE_FORMATS[:default] = ->(time) { I18n.localize time, format: :default }
0 голосов
/ 07 сентября 2018

Для людей, интересующихся форматированием в определенном месте, а не во всем проекте, рекомендуется несколько ответов, чтобы проверить, является ли значение NULL, и я хочу добавить, что использование try с strftime поможет сделать его короче.

            <%= f.fields_for :assets_depreciations do |asset| %>
              <tr>
                <td>
                  <%= asset.text_field :depreciation_date, value: asset.object.depreciation_date.try(:strftime, "%d-%m-%Y") %>
                </td>
              </tr>
            <% end %>
0 голосов
/ 05 ноября 2013

У меня были похожие проблемы с атрибутами / полями времени. Таким образом, можно следовать этому:

http://railscasts.com/episodes/32-time-in-text-field

И это работает довольно хорошо.

Но я покопался и нашел другое интересное решение. Вроде уродливой обезьяньей повязки, но в некоторых случаях она может быть более полезной, чем та, что была сделана на Railscasts.

Итак, у меня есть модель со столбцом с именем time (ofc она имеет тип времени). Вот мое решение:

  after_initialize :init

  private
  def init
    unless time.nil?
      @attributes['time'] = I18n.l(time, format: :short)
    end
  end

Как видите, я форматирую переменную, которая будет возвращена методом time_before_type_cast. Таким образом, я правильно отформатировал время при вводе текста (отображается FormBuilder), но если пользователь вводит что-то неправильное, например 10;23, у меня все еще есть это, и в следующем запросе оно будет отображаться FormBuilder::text_field. Таким образом, у пользователя есть возможность исправить свою жалкую ошибку.

0 голосов
/ 20 сентября 2009

Если вы можете установить значение вручную, вы можете использовать create_at.strftime ("% m-% d-% Y") http://snippets.dzone.com/tag/strftime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...