루비 온 레일즈에서 "10월 5일 일요일"과 같이 "th" 접미사로 날짜 형식을 지정하려면 어떻게 해야 합니까?
날짜를 짧은 요일, 짧은 달, 0으로 시작하지 않고 "th", "st", "nd" 또는 "rd" 접미사를 포함하는 날짜 형식으로 표시합니다.
예를 들어, 이 질문을 받은 날짜는 "Thu Oct 2nd"로 표시됩니다.
저는 루비 1.8.7을 사용하고 있는데 Time.strftime은 이것을 하지 않는 것 같습니다.표준 도서관이 있으면 좋겠습니다.
'active_support'의 순서화 방법을 사용합니다.
>> time = Time.new
=> Fri Oct 03 01:24:48 +0100 2008
>> time.strftime("%a %b #{time.day.ordinalize}")
=> "Fri Oct 3rd"
IRB를 Ruby 2.0과 함께 사용하는 경우 먼저 다음을 실행해야 합니다.
require 'active_support/core_ext/integer/inflections'
active_support의 순서화 도우미 메서드를 숫자에 사용할 수 있습니다.
>> 3.ordinalize
=> "3rd"
>> 2.ordinalize
=> "2nd"
>> 1.ordinalize
=> "1st"
패트릭 맥켄지의 답변을 조금 더 살펴보면, 당신은 당신의 컴퓨터에 새 파일을 만들 수 있습니다.config/initializers
호출된 디렉토리date_format.rb
(또는 원하는 것을 무엇이든) 넣고 이것을 입력합니다.
Time::DATE_FORMATS.merge!(
my_date: lambda { |time| time.strftime("%a, %b #{time.day.ordinalize}") }
)
그런 다음 보기 코드에서 새 날짜 형식을 할당하기만 하면 모든 날짜 형식을 지정할 수 있습니다.
My Date: <%= h some_date.to_s(:my_date) %>
단순하고, 작동하며, 구축하기 쉽습니다.각각의 다른 날짜 형식에 대해 date_format.rb 파일에 형식 행을 추가하기만 하면 됩니다.여기 좀 더 구체적인 예가 있습니다.
Time::DATE_FORMATS.merge!(
datetime_military: '%Y-%m-%d %H:%M',
datetime: '%Y-%m-%d %I:%M%P',
time: '%I:%M%P',
time_military: '%H:%M%P',
datetime_short: '%m/%d %I:%M',
due_date: lambda { |time| time.strftime("%a, %b #{time.day.ordinalize}") }
)
>> require 'activesupport'
=> []
>> t = Time.now
=> Thu Oct 02 17:28:37 -0700 2008
>> formatted = "#{t.strftime("%a %b")} #{t.day.ordinalize}"
=> "Thu Oct 2nd"
Jonathan Trans는 처음에는 축약된 요일을 찾고 있고 그 다음에는 달을 찾고 있다고 말했지만, 저는 Rails가 더 일반적으로 사용 가능한 긴 달, 순서화된 날짜 정수, 그 다음에는 연도를 지원한다는 것을 아는 것이 유용할 것이라고 생각합니다.June 1st, 2018
.
다음을 통해 쉽게 달성할 수 있습니다.
Time.current.to_date.to_s(:long_ordinal)
=> "January 26th, 2019"
또는:
Date.current.to_s(:long_ordinal)
=> "January 26th, 2019"
다음과 같은 경우에도 시간 인스턴스를 유지할 수 있습니다.
Time.current.to_s(:long_ordinal)
=> "January 26th, 2019 04:21"
사용자 정의 형식을 만드는 방법에 대한 자세한 내용은 Rails API 문서에서 확인할 수 있습니다.
직접 만들기%o
서식을 정하다
이니셜라이저
config/initializers/srtftime.rb
module StrftimeOrdinal
def self.included( base )
base.class_eval do
alias_method :old_strftime, :strftime
def strftime( format )
old_strftime format.gsub( "%o", day.ordinalize )
end
end
end
end
[ Time, Date, DateTime ].each{ |c| c.send :include, StrftimeOrdinal }
사용.
Time.new( 2018, 10, 2 ).strftime( "%a %b %o" )
=> "Tue Oct 2nd"
이것을 사용할 수 있습니다.Date
그리고.DateTime
또한:
DateTime.new( 2018, 10, 2 ).strftime( "%a %b %o" )
=> "Tue Oct 2nd"
Date.new( 2018, 10, 2 ).strftime( "%a %b %o" )
=> "Tue Oct 2nd"
저는 바르토즈의 대답이 마음에 듭니다만, 이봐, 우리가 이야기하고 있는 레일즈니까, 한 걸음 더 나아가자꾸나. (편집:다음과 같은 방법으로 원숭이 패치를 하려고 했지만, 알고 보니 더 깨끗한 방법이 있습니다.)
DateTime
예를 들어to_formatted_s
ActiveSupport에서 제공하는 메서드입니다. 이 메서드는 단일 기호를 매개 변수로 사용하고 해당 기호가 유효한 미리 정의된 형식으로 인식되면 적절한 형식의 문자열을 반환합니다.
은 이한기는다같정이다니의됩음과호러다▁are니▁by▁those정으로 됩니다.Time::DATE_FORMATS
이는 표준 형식 지정 함수에 대한 문자열에 대한 기호의 해시입니다.또는 프로시저.흐흐흐흐.
d = DateTime.now #Examples were executed on October 3rd 2008
Time::DATE_FORMATS[:weekday_month_ordinal] =
lambda { |time| time.strftime("%a %b #{time.day.ordinalize}") }
d.to_formatted_s :weekday_month_ordinal #Fri Oct 3rd
하지만, 만약 당신이 원숭이 패치를 할 기회를 거부할 수 없다면, 당신은 항상 더 깨끗한 인터페이스를 제공할 수 있습니다.
class DateTime
Time::DATE_FORMATS[:weekday_month_ordinal] =
lambda { |time| time.strftime("%a %b #{time.day.ordinalize}") }
def to_my_special_s
to_formatted_s :weekday_month_ordinal
end
end
DateTime.now.to_my_special_s #Fri Oct 3rd
언급URL : https://stackoverflow.com/questions/165170/in-ruby-on-rails-how-do-i-format-a-date-with-the-th-suffix-as-in-sun-oct-5
'programing' 카테고리의 다른 글
vba 코드를 libreoffice와 호환되도록 하려면 어떻게 해야 합니까? (0) | 2023.06.15 |
---|---|
에 의해 정의된 경우 .in .Range가 필요합니다.세포? (0) | 2023.06.15 |
Oracle에서 varchar를 별도의 열로 분할 (0) | 2023.06.15 |
python-dev 설치 오류:가져오기 오류: 이름이 apt_pkg인 모듈이 없습니다. (0) | 2023.06.15 |
Django 모델 생성 또는 업데이트(있는 경우) (0) | 2023.06.10 |