• 0

كيف أحسب الوقت المنقضي في ROR ؟

أقوم بكتابة تطبيق ROR(Ruby On Rails) لكن لا أعرف كيف أضع الوقت المنقضي عن وقت معين، فمثلا إذا قمت بتمرير وقت ما لنشأت ملف ما، فأريد أن أقوم بكتابة شيفرة برمجية تقوم بحساب المدة الزمنية المنقضية بعد الإنشاء مثلا "تم الإنشاء قبل 30 ثانية" أو "تم الإنشاء قبل قبل يومين" ... فكيف أستطيع فعل ذلك ؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هنالك عدة طرق لوضع وقت نسبي، فمثلا إذا كنت تستخدم ريلز 3 أو 4 يمكنك استخدام تابع time_ago_in_words والذي سيقوم بحساب الوقت المنقضي منذ إنشاء الملف، على سبيل المثال يُمكنك كتابة شيء مشابه لهذا إذا كنت في العرض (view):

<%= time_ago_in_words(Date.today - 1) %>

أما لو كنت في المتحكم فيجب عليك في هذه الحالة استدعاء DateHelper من ActionView ومن ثم استخدام تابع time_ago_in_words كما في المثال التالي:

include ActionView::Helpers::DateHelper
def index
  @date_ago = time_ago_in_words(Date.today - 1)
end


ملاحظة: المتحكمات لا تقوم باستدعاء وحدة ActionView::Helpers::DateHelper بشكل افتراضي لذلك يجب استدعائها يدويًا كما في المثال.
يمكنك أيضًا انشاء دالتك الخاص لحساب الوقت كما في هذا المثال:

module PrettyDate
  def to_pretty
    a = (Time.now-self).to_i

    case a
      when 0 then 'just now'
      when 1 then 'a second ago'
      when 2..59 then a.to_s+' seconds ago'
      when 60..119 then 'a minute ago' #120 = 2 minutes
      when 120..3540 then (a/60).to_i.to_s+' minutes ago'
      when 3541..7100 then 'an hour ago' # 3600 = 1 hour
      when 7101..82800 then ((a+99)/3600).to_i.to_s+' hours ago'
      when 82801..172000 then 'a day ago' # 86400 = 1 day
      when 172001..518400 then ((a+800)/(60*60*24)).to_i.to_s+' days ago'
      when 518400..1036800 then 'a week ago'
      else ((a+180000)/(60*60*24*7)).to_i.to_s+' weeks ago'
    end
  end
end

Time.send :include, PrettyDate

المصدر

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن