Я хочу отображать даты в формате: короткий день недели, короткий месяц, день месяца без начального нуля, но с суффиксом «th», «st», «nd» или «rd».
Например, день, когда был задан этот вопрос, будет отображать «Чт 2 октября».
Я использую Ruby 1.8.7, и Time.strftime , похоже, этого не делает. Я бы предпочел стандартную библиотеку, если она существует.
ruby-on-rails
ruby
date
Джонатан Тран
источник
источник
Ответы:
Используйте метод ordinalize из 'active_support'.
Обратите внимание, если вы используете IRB с Ruby 2.0, вы должны сначала выполнить:
источник
Вы можете использовать вспомогательный метод ordinalize active_support для чисел.
источник
Взяв ответ Патрика МакКензи чуть дальше, вы можете создать в вашем
config/initializers
каталоге новый файл с именемdate_format.rb
(или как хотите) и поместить его в него:Затем в коде представления вы можете отформатировать любую дату, просто присвоив ей новый формат даты:
Это просто, это работает, и это легко построить. Просто добавьте больше строк формата в файл date_format.rb для каждого из ваших различных форматов даты. Вот более конкретный пример.
источник
Time::DATE_FORMATS.merge!(:my_date => lambda { |time| time.strftime("%a, %b #{ActiveSupport::Inflector.ordinalize(time.day)}") })
источник
Мне нравится ответ Бартоша, но, эй, так как это Rails, о котором мы говорим, давайте сделаем еще один шаг в хитрости. (Правка: хотя я собирался просто обезьянить патч следующий метод, оказывается, есть более чистый способ.)
DateTime
экземпляры имеютto_formatted_s
метод, предоставленный ActiveSupport, который принимает один символ в качестве параметра и, если этот символ распознается как допустимый предопределенный формат, возвращает строку с соответствующим форматированием.Эти символы определены с помощью
Time::DATE_FORMATS
, который является хешем символов либо для строк для стандартной функции форматирования ..., либо для процедур. Bwahaha.Но, эй, если вы не можете устоять перед возможностью сделать monkeypatch, вы всегда можете придать этому более чистый интерфейс:
источник
Создайте свой собственный
%o
формат.Initializer
config/initializers/srtftime.rb
использование
Вы можете использовать это с
Date
и ,DateTime
а также:источник
Time
в вашем проекте?Хотя Джонатан Тран сказал, что сначала он искал сокращенный день недели, за которым следует сокращенный месяц, я думаю, что людям, которые в конечном итоге окажутся здесь, было бы полезно узнать, что Rails имеет встроенную поддержку для более обычно используемый длинный месяц, порядковый номер дня, целое, за которым следует год, как в
June 1st, 2018
.Это может быть легко достигнуто с помощью:
Или:
Вы также можете придерживаться временного примера, если хотите:
Вы можете найти больше форматов и контекста о том, как создать свой собственный документ в Rails API .
источник