আমি একটি রেল অ্যাপ্লিকেশন লিখছি, তবে আপেক্ষিক সময় কীভাবে করা যায় তা খুঁজে পাওয়া যাচ্ছে না, যেমন একটি নির্দিষ্ট সময় শ্রেণি দেওয়া হয়, এটি "30 সেকেন্ড আগে" বা "2 দিন আগে" গণনা করতে পারে বা যদি এটি এক মাসেরও বেশি দীর্ঘ হয় "9/1/2008", ইত্যাদি
আমি একটি রেল অ্যাপ্লিকেশন লিখছি, তবে আপেক্ষিক সময় কীভাবে করা যায় তা খুঁজে পাওয়া যাচ্ছে না, যেমন একটি নির্দিষ্ট সময় শ্রেণি দেওয়া হয়, এটি "30 সেকেন্ড আগে" বা "2 দিন আগে" গণনা করতে পারে বা যদি এটি এক মাসেরও বেশি দীর্ঘ হয় "9/1/2008", ইত্যাদি
উত্তর:
আপনি অ্যাক্টিভসপোর্ট থেকে time_ago_in_words
পদ্ধতিটি (বা distance_of_time_in_words
) সন্ধান করছেন বলে মনে হচ্ছে। এটিকে কল করুন:
<%= time_ago_in_words(timestamp) %>
ActiveSupport
, এটি সংজ্ঞায়িত হয়েছে ActionView::Helpers::DateHelper
।
helper
যা আপনি কল করতে এবং এই পদ্ধতিগুলি অ্যাক্সেস করতে পারেন। helper.time_ago_in_words(timestamp)
require 'active_support/core_ext'
প্রথমে, এবং তারপরে আপনি সমস্ত 7.days.ago
অন্যান্য অনুরূপ নির্মাণ এবং ব্যবহারের জন্য প্রস্তুত।
আমি এটি লিখেছি, তবে বিদ্যমান পদ্ধতিগুলি আরও ভাল কিনা তা পরীক্ষা করে দেখতে হবে।
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
return
নীচের case
স্টেটমেন্টের মধ্যে শেষ লাইনটি রাখতে else
পারেন এবং সমস্ত return
গুলি মুছে ফেলতে পারেন ।
+99
+800
+180000
?
সময়_গো_ইন_ওয়ার্ডগুলি
ব্যবহারের জন্য অ্যান্ড্রু মার্শালের সমাধানটি কেবল স্পষ্ট করতে
( 3.0.০ এবং রেল 4.0.০)
আপনি যদি একটি ভিউ হয়
<%= time_ago_in_words(Date.today - 1) %>
আপনি যদি একটি নিয়ামক হয়
include ActionView::Helpers::DateHelper
def index
@sexy_date = time_ago_in_words(Date.today - 1)
end
কন্ট্রোলারদের অ্যাকশনভিউ :: সহায়কগুলি :: ডেটহেল্পারটি মডিউলটি ডিফল্টরূপে আমদানি করে না।
এনবি আপনার নিয়ামকদের সাহায্যকারীদের আমদানি করা "রেলপথ" নয়। সাহায্যকারীরা দর্শনগুলি সহায়তা করার জন্য। Time_ago_in_words পদ্ধতি হতে সিদ্ধান্ত নেওয়া হয় দৃশ্য মধ্যে সত্তা MVC ত্রয়ী। (আমি একমত নই তবে রোমে কখন ...)
আপেক্ষিক সময় করতে আপনি গাণিতিক অপারেটরগুলি ব্যবহার করতে পারেন।
Time.now - 2.days
আপনাকে 2 দিন আগে দেবে।
2.days.since
বা2.days.from_now
এরকম কিছু কাজ করবে।
def relative_time(start_time)
diff_seconds = Time.now - start_time
case diff_seconds
when 0 .. 59
puts "#{diff_seconds} seconds ago"
when 60 .. (3600-1)
puts "#{diff_seconds/60} minutes ago"
when 3600 .. (3600*24-1)
puts "#{diff_seconds/3600} hours ago"
when (3600*24) .. (3600*24*30)
puts "#{diff_seconds/(3600*24)} days ago"
else
puts start_time.strftime("%m/%d/%Y")
end
end
#{diff_seconds/360}
হওয়া উচিত #{diff_seconds/3600}
। আমি এটি সম্পাদনা করেছি।
যেহেতু এখানে সর্বাধিক উত্তর সময়_গো_ইন_ওয়ার্ডগুলি প্রস্তাব করে ।
পরিবর্তে ব্যবহার করুন:
<%= time_ago_in_words(comment.created_at) %>
কারাগারে, পছন্দ করুন:
<abbr class="timeago" title="<%= comment.created_at.getutc.iso8601 %>">
<%= comment.created_at.to_s %>
</abbr>
কোড সহ একটি jQuery লাইব্রেরি http://timeago.yarp.com/ সহ:
$("abbr.timeago").timeago();
প্রধান সুবিধা: ক্যাচিং
http://rails-bestpractices.com/posts/2012/02/10/not-use-time_ago_in_words/
time_ago_in_words
না সময় এস
এখানে উদাহরণ পদ্ধতিগুলি একবার দেখুন:
এর দরকারী পদ্ধতি রয়েছে যেমন গতকাল, আগামীকাল, সূচনা_আর_উইক, পূর্ব, ইত্যাদি has
উদাহরণ:
Time.now.yesterday
Time.now.ago(2.days).end_of_day
Time.now.next_month.beginning_of_month
আমি একটি রত্ন লিখেছি যা রেল অ্যাক্টিভেকর্ড অবজেক্টের জন্য এটি করে। উদাহরণটি তৈরি করা_টাকে ব্যবহার করে তবে এটি আপডেট_আট বা ক্লাস অ্যাক্টিভসপোর্ট :: টাইম উইথজোন সহ কিছুতে কাজ করবে।
আপনার টাইমবিথজোন উদাহরণটিতে কেবল মণি ইনস্টল করুন এবং 'সুন্দর' পদ্ধতিটি কল করুন।
যদি আপনি একটি রেল অ্যাপ্লিকেশন তৈরি করে থাকেন তবে আপনার ব্যবহার করা উচিত
Time.zone.now
Time.zone.today
Time.zone.yesterday
এটি আপনাকে সময়সীমার সময় বা তারিখ দেয় যা দিয়ে আপনি আপনার রেল অ্যাপ্লিকেশন কনফিগার করেছেন।
উদাহরণস্বরূপ, আপনি যদি ইউটিসি ব্যবহারের জন্য আপনার অ্যাপ্লিকেশনটি কনফিগার করেন তবে Time.zone.now
সর্বদা ইউটিসি সময় হবে (উদাহরণস্বরূপ ব্রিটিশ গ্রীষ্মকালীন পরিবর্তন দ্বারা এটি প্রভাবিত হবে না)।
আপেক্ষিক সময় গণনা করা সহজ, যেমন
Time.zone.now - 10.minute
Time.zone.today.days_ago(5)
আর একটি উপায় হ'ল ব্যাকএন্ড থেকে কিছু যুক্তি আনলোড করা এবং জাভাস্ক্রিপ্ট প্লাগইন ব্যবহার করে ব্রাউজারটি কাজটি করা যেমন: