Как мне отформатировать дату в ruby, чтобы включить “rd”, как в “3rd” [дубликат]

StackOverflow https://stackoverflow.com/questions/1081926

  •  22-08-2019
  •  | 
  •  

Вопрос

Я хочу отформатировать объект date так, чтобы я мог отображать такие строки, как "3 июля" или "1 октября".Я не могу найти опцию в Date.strftime для генерации "rd" и "st".Кто-нибудь знает, как это сделать?

Это было полезно?

Решение

Я собираюсь повторить за всеми остальными, но я просто призываю вас загрузить activesupport драгоценный камень, так что вы можете просто использовать его как библиотеку.Вам не нужно использовать все Rails для ordinalize.

% gem install activesupport
...
% irb 
irb> require 'rubygems'
#=>  true
irb> require 'activesupport'
#=>  true
irb> 3.ordinalize
#=>  "3rd"

Другие советы

Если только вы не используете Рельсы, добавьте это упорядочить метод (код бесстыдно взят из исходного кода Rails) для Фиксированный Номер класс

class Fixnum
  def ordinalize
    if (11..13).include?(self % 100)
      "#{self}th"
    else
      case self % 10
        when 1; "#{self}st"
        when 2; "#{self}nd"
        when 3; "#{self}rd"
        else    "#{self}th"
      end
    end
  end
end

Затем отформатируйте свою дату следующим образом:

> now = Time.now
> puts now.strftime("#{now.day.ordinalize} of %B, %Y")
=> 4th of July, 2009
created_at.strftime("#{created_at.day.ordinalize} of %m, %y")

Продюсирует "4 июля 2009"

Я не думаю, что у Ruby это есть, но если у вас есть Rails, попробуйте это:-

puts 3.ordinalize #=> "3rd"

Кажется, я возвращаюсь к этой теме в третий раз, поэтому я обновил свою суть некоторыми дополнительными комментариями / использованием.

https://gist.github.com/alterisian/4154152

Твое здоровье, Йен.

Я не знаю, делает ли это это настолько (вообще?) быстрее, чем switch-case , но я создал константу с окончаниями:

DAY_ENDINGS = ["th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "st"]

Затем просто использовал это как:

DAY_ENDINGS[date.mday]

Как я и хотел, концовка внутри

<span>th</span>

требуется "активная поддержка"
1.порядковый номер => 'st'
1.упорядочить => '1-й'

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top