كيف يمكنني تنسيق تاريخ في روبي لتشمل "rd" كما في "3" [مكررة]

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

  •  22-08-2019
  •  | 
  •  

سؤال

أريد أن تنسيق موعد الكائن بحيث لا يمكن عرض سلاسل مثل "3 يوليو" أو "1 تشرين الأول / أكتوبر".أنا لا يمكن أن تجد خيارا في التاريخ.strftime لتوليد "rd" و "ش".أي واحد يعرف كيف نفعل هذا ؟

هل كانت مفيدة؟

المحلول

أنا ذاهب إلى صدى الجميع, ولكن أنا فقط سوف نشجعكم على تحميل activesupport جوهرة, لذلك يمكنك فقط استخدامه كمكتبة.أنت لا تحتاج إلى كل من القضبان إلى استخدام ordinalize.

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

نصائح أخرى

إلا إذا كنت تستخدم القضبان, إضافة هذه ordinalize طريقة (رمز بلا خجل رفعت من القضبان مصدر) 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")

سوف تنتج "4th من تموز / يوليه 2009"

لا أعتقد روبي ، ولكن إذا كان لديك القضبان ، حاول هذا:-

puts 3.ordinalize #=> "3rd"

يبدو أنني النظر في هذا الموضوع للمرة الثالثة ، حتى لقد بتحديث جوهر مع بعض تعليقات إضافية / الاستخدام.

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.ترتيبي => 'ش'
1.ordinalize => '1'

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top