Изменить стандартный формат Ruby Time - PullRequest
6 голосов
/ 13 января 2011

Мне постоянно приходится добавлять ".strftime ("% H:% M ") ко всему, что отображает время в моем проекте Rails. У меня есть время начала и время окончания для каждого объекта Концерта, поэтому я должен добавить ".strftime ("% H:% M ")" всякий раз, когда я хочу отобразить эти времена.

Обратите внимание, что я не прошу менять формат даты. Дата выглядит хорошо, как есть (как ММ / ДД / ГГГГ).

Какой лучший способ обойти это? Есть ли способ установить формат времени по умолчанию?

(Я почти уверен, что это только Ruby, но я новичок, поэтому я не уверен.)

Ответы [ 4 ]

16 голосов
/ 13 января 2011

Поскольку вы используете Rails, воспользуйтесь поддержкой I18n: http://guides.rubyonrails.org/i18n.html#adding-date-time-formats

# config/locales/en.yml
en:
  time:
    formats:
      default: "%H:%M"

Затем, когда вы позвоните I18n.l Time.now или <%= l Time.now %>, он будет использовать этот формат автоматически.

2 голосов
/ 13 января 2011

Ruby on Rails имеет встроенные пресеты для форматирования Date и Time экземпляров. Вот что они для Time на моей машине:

>> Time::DATE_FORMATS
=> {:short=>"%d %b %H:%M", :db=>"%Y-%m-%d %H:%M:%S", :rfc822=>#<Proc:0x0000000103700b08@/Users/donovan/.gem/gems/activesupport-3.0.1/lib/active_support/core_ext/time/conversions.rb:13>, :time=>"%H:%M", :number=>"%Y%m%d%H%M%S", :long_ordinal=>#<Proc:0x0000000103700e50@/Users/donovan/.gem/gems/activesupport-3.0.1/lib/active_support/core_ext/time/conversions.rb:12>, :long=>"%B %d, %Y %H:%M"}

Вы можете легко использовать их так:

>> Time.now.to_s(:db)
=> "2011-01-12 15:26:11"

Вы можете определить свой собственный и использовать его тоже:

>> Time::DATE_FORMATS[:mine] = "%H:%M"
=> "%H:%M"
>> Time.now.to_s(:mine)
=> "15:28"
1 голос
/ 13 января 2011

Вы можете создать пользовательскую функцию в вашем файле application_helper.rb. Может быть что-то вроде:

def custom_time(date)
  date.strftime("%H:%M")
end

Не уверен, что это лучшая практика, но она должна работать хорошо.

0 голосов
/ 13 января 2011

Я использую инициализатор: config / initializers / time_formats.rb, который содержит:

[Time, Date].map do |klass|
  klass::DATE_FORMATS[:app_date] = "%m/%d/%Y"
  klass::DATE_FORMATS[:app_month_and_year] = "%B %Y"
  klass::DATE_FORMATS[:app_abbrev_month_and_year] = "%b %Y"
  ...
end

Затем я использую Time.now.to_s (: app_date) и т. Д. В зависимости от того, как я хочу его отобразить. Вы можете добавить Time::DATE_FORMATS[:default] = "%H:%M", чтобы выполнить то, что вы пытаетесь сделать. Это не интернационализировано, хотя - для этого, ответ Coreyward, вероятно, лучше.

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