Подтвердить что ты не робот

Как форматировать дату в рубине, чтобы включить "rd", как в "3rd",

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

4b9b3361

Ответ 1

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

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

Ответ 2

Если вы не используете Rails, добавьте этот метод ordinalize (код бесстыдно снятый с источника Rails) до класса Fixnum

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

Ответ 3

created_at.strftime("#{created_at.day.ordinalize} of %m, %y")

Будет выпускать "4 июля 2009 года"

Ответ 4

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

puts 3.ordinalize #=> "3rd"

Ответ 5

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

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

Cheers, Ян.

Ответ 6

Я не знаю, делает ли это так много (любого?) быстрее, чем 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>

Ответ 7

требуется "activesupport"
1.ординарный = > 'st'
1.ordinalize = > '1st'