Форматирование даты как слова в Rails - PullRequest
9 голосов
/ 07 августа 2011

Итак, у меня есть экземпляр модели с атрибутом datetime.Я отображаю его в своем представлении, используя:

<%= @instance.date.to_date %> 

, но оно отображается как: 2011-09-09

Я хочу, чтобы оно отображалось как: 9 сентября 2011

Как мне это сделать?

Спасибо!

Ответы [ 5 ]

13 голосов
/ 07 августа 2011
<%= @instance.date.strftime("%B %d, %Y") %>

Это даст вам «9 сентября 2011 года».

Если вам действительно нужен порядковый номер в тот день («th», «rd» и т. Д.), Вы можете сделать:1004 *

<%= @instance.date.strftime("%B #{@instance.date.day.ordinalize}, %Y") %>
10 голосов
/ 11 апреля 2012

Существует более простой встроенный метод для достижения требуемого стиля дат.

<%= @instance.datetime.to_date.to_formatted_s :long_ordinal %>

Метод to_formatted_s по умолчанию принимает различные параметры атрибута формата. Например, из Rails API:

date.to_formatted_s(:db)            # => "2007-11-10"
date.to_s(:db)                      # => "2007-11-10"

date.to_formatted_s(:short)         # => "10 Nov"
date.to_formatted_s(:long)          # => "November 10, 2007"
date.to_formatted_s(:long_ordinal)  # => "November 10th, 2007"
date.to_formatted_s(:rfc822)        # => "10 Nov 2007"

Вы можете увидеть полное объяснение здесь .

7 голосов
/ 16 марта 2013

Для этого Rails может использовать

<%=l @instance.date %>

"l" - это сокращение от "localize", и он преобразует дату в читаемый формат, используя формат, который вы определили в en.yml,Вы можете определить различные форматы в файле yml:

en:
  date:
    formats:
      default: ! '%d.%m.%Y'
      long: ! '%a, %e. %B %Y'
      short: ! '%e. %b'

Чтобы использовать другой формат, отличный от используемого по умолчанию, используйте:

<%=l @instance.date, format: :short %>
1 голос
/ 28 июля 2015

У вас также есть <% = time_tag time%> в рельсах

1 голос
/ 02 февраля 2013

В Rails встроен ActiveSupport в качестве инфлектора:

ActiveSupport::Inflector.ordinalize(@instance.date.day)
...