"3rd[복제]에서와 같이 "rd"를 포함시키기 위해 Ruby의 날짜를 어떻게 포맷합니까?

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

  •  22-08-2019
  •  | 
  •  

문제

"7 월 3 일"또는 "10 월 1 일"과 같은 문자열을 표시 할 수 있도록 날짜 개체를 포맷하고 싶습니다. "rd"및 "st"를 생성하기 위해 date.strftime에서 옵션을 찾을 수 없습니다. 누구 든지이 작업을 수행하는 방법을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

나는 다른 모든 사람들을 반향 할 것이지만, 나는 당신이 activesupport 보석, 그래서 당신은 그것을 도서관으로 사용할 수 있습니다. 당신은 모든 레일을 사용할 필요는 없습니다 ordinalize.

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

다른 팁

사용하지 않는 한 울타리, 이거 추가 해봐 안수화 방법 (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
created_at.strftime("#{created_at.day.ordinalize} of %m, %y")

"2009 년 7 월 4 일"을 생산할 것입니다.

나는 루비가 그것을 가지고 있다고 생각하지 않지만, 당신이 레일이 있다면, 이것을 시도하십시오 :-

puts 3.ordinalize #=> "3rd"

이 주제를 세 번째로 다시 방문하고있는 것 같습니다. 그래서 추가 의견 / 사용법으로 GIST를 업데이트했습니다.

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

건배, 이안.

나는 그것이 스위치 케이스보다 더 빠르게 (어떤 것입니까?)를 더 빨리 만들지는 모르겠지만 결말로 일정하게 만들었습니다.

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>

'ActivesUpport'필요
1. ordinal => 'st'
1. ordinalize => '1st'

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top