복붙노트

[RUBY-ON-RAILS] 루비 온 레일즈에서, 어떻게 "일 10 월 5 일"에서와 같이 "일"접미사로 날짜를 포맷합니까?

RUBY-ON-RAILS

루비 온 레일즈에서, 어떻게 "일 10 월 5 일"에서와 같이 "일"접미사로 날짜를 포맷합니까?

"일", "일"을 앞에 0이되지만 포함하지 않고 일주일의 짧은 하루, 짧은 월, 달의 일 "차"또는 "RD"접미사 : 나는 형식으로 날짜를 표시합니다.

예를 들어,이 질문은 요청 된 날은 "목 10월 2일"를 표시합니다.

루비 1.8.7를 사용하고, 그리고 Time.strftime는이 작업을 수행하지 않는 것 같습니다. 가있는 경우 나 표준 라이브러리를 원합니다.

해결법

  1. ==============================

    1.'active_support'에서 ordinalize 방법을 사용합니다.

    'active_support'에서 ordinalize 방법을 사용합니다.

    >> time = Time.new
    => Fri Oct 03 01:24:48 +0100 2008
    >> time.strftime("%a %b #{time.day.ordinalize}")
    => "Fri Oct 3rd"
    

    루비 2.0 IRB를 사용하는 경우, 먼저 실행해야합니다 :

    require 'active_support/core_ext/integer/inflections'
    
  2. ==============================

    2.당신은 숫자에 active_support의 ordinalize 도우미 방법을 사용할 수 있습니다.

    당신은 숫자에 active_support의 ordinalize 도우미 방법을 사용할 수 있습니다.

    >> 3.ordinalize
    => "3rd"
    >> 2.ordinalize
    => "2nd"
    >> 1.ordinalize
    => "1st"
    
  3. ==============================

    3.단지 조금 더 패트릭 맥켄지의 답변을 복용, 당신은 당신의 설정 / 초기화에 디렉토리라는 date_format.rb를 새 파일을 만들 수 있습니다 (또는 당신이 원하는 무엇이든)과이를 넣어 :

    단지 조금 더 패트릭 맥켄지의 답변을 복용, 당신은 당신의 설정 / 초기화에 디렉토리라는 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}") }
    )
    
  4. ==============================

    4.

    >> require 'activesupport'
    => []
    >> t = Time.now
    => Thu Oct 02 17:28:37 -0700 2008
    >> formatted = "#{t.strftime("%a %b")} #{t.day.ordinalize}"
    => "Thu Oct 2nd"
    
  5. ==============================

    5.바르 토스의 대답처럼 나는, 그러나 이것은 우리가 이야기하고있는 레일 때문에 헤이,하자가 악독에서 한 단계 차지합니다. (편집 : 난 그냥 다음과 같은 방법을 monkeypatch하려고했지만, 거기 회전은 청소기 방법입니다.)

    바르 토스의 대답처럼 나는, 그러나 이것은 우리가 이야기하고있는 레일 때문에 헤이,하자가 악독에서 한 단계 차지합니다. (편집 : 난 그냥 다음과 같은 방법을 monkeypatch하려고했지만, 거기 회전은 청소기 방법입니다.)

    날짜 시간 인스턴스는 그 기호가 유효 정의 된 포맷으로 인식되면 적절한 형식 문자열을 리턴하는 파라미터로서 하나의 심볼을 취하고 ActiveSupport 의해 공급 to_formatted_s 방법을 가지고있다.

    그 기호는 표준 포맷 함수 ... 또는 발동을위한 두 문자열을 문자의 해시 시간 : DATE_FORMATS에 의해 정의된다. Bwahaha.

    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
    

    당신이 monkeypatch 수있는 기회를 저항 할 수없는 경우하지만, 이봐, 당신은 항상 깨끗한 인터페이스를 줄 수 :

    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
    
  6. ==============================

    6.설정 / 초기화 / srtftime.rb

    설정 / 초기화 / 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"
    

    당신은뿐만 아니라 날짜와 날짜 시간에 이것을 사용할 수 있습니다 :

    DateTime.new( 2018, 10, 2 ).strftime( "%a %b %o" )
    => "Tue Oct 2nd"
    
    Date.new( 2018, 10, 2 ).strftime( "%a %b %o" )
    => "Tue Oct 2nd"
    
  7. ==============================

    7.조나단 트란은 그가 처음 약식 달 다음에 주의 축약 일을 찾고 있었다라고 않았지만, 나는 그것이 그 레일을 알고 여기까지 사람들을 위해 유용 할 수 있습니다 생각은 더 많은 것을 위해 아웃 - 오브 - 박스 지원을하고있다 일반적으로 사용 가능한 긴 월, ordinalized 일 정수 년 6 월 제 1 회, 2018 년으로, 올해 하였다.

    조나단 트란은 그가 처음 약식 달 다음에 주의 축약 일을 찾고 있었다라고 않았지만, 나는 그것이 그 레일을 알고 여기까지 사람들을 위해 유용 할 수 있습니다 생각은 더 많은 것을 위해 아웃 - 오브 - 박스 지원을하고있다 일반적으로 사용 가능한 긴 월, ordinalized 일 정수 년 6 월 제 1 회, 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"
    

    당신은 레일 API 문서에서 사용자 지정을 만드는 방법에 대한 자세한 형식과 컨텍스트를 찾을 수 있습니다.

  8. from https://stackoverflow.com/questions/165170/in-ruby-on-rails-how-do-i-format-a-date-with-the-th-suffix-as-in-sun-oct-5 by cc-by-sa and MIT license