كيف يمكنني تنسيق تاريخ في روبي لتشمل "rd" كما في "3" [مكررة]
سؤال
هذا السؤال سبق الجواب هنا:
أريد أن تنسيق موعد الكائن بحيث لا يمكن عرض سلاسل مثل "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'