اذهب إلى المحتوى

السؤال

نشر

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

Recommended Posts

  • 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

المصدر

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...