"3rd[복제]에서와 같이 "rd"를 포함시키기 위해 Ruby의 날짜를 어떻게 포맷합니까?
문제
이 질문은 이미 여기에 답이 있습니다.
"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'