আপনি কীভাবে আপিলগুলিতে আপেল সময় করবেন?


220

আমি একটি রেল অ্যাপ্লিকেশন লিখছি, তবে আপেক্ষিক সময় কীভাবে করা যায় তা খুঁজে পাওয়া যাচ্ছে না, যেমন একটি নির্দিষ্ট সময় শ্রেণি দেওয়া হয়, এটি "30 সেকেন্ড আগে" বা "2 দিন আগে" গণনা করতে পারে বা যদি এটি এক মাসেরও বেশি দীর্ঘ হয় "9/1/2008", ইত্যাদি


1
'গণনা' ভুল শব্দ বলে মনে হচ্ছে, আপনার অর্থ 'আউটপুট'?
lulalala

উত্তর:


366

আপনি অ্যাক্টিভসপোর্ট থেকে time_ago_in_wordsপদ্ধতিটি (বা distance_of_time_in_words) সন্ধান করছেন বলে মনে হচ্ছে। এটিকে কল করুন:

<%= time_ago_in_words(timestamp) %>

4
কোনও রুবি নবীকে ইঙ্গিত দিয়ে কীভাবে এটি চালানো যায় তার ইঙ্গিত? আমি চালনা করছি: 'অ্যাক্টিভ_সপোর্ট' প্রয়োজন এবং তারপরে 'টাইম_গো_ইন_ওয়ার্ডস (টাইম.নো) চেষ্টা করুন' তবে ফাংশনটি পাওয়া যায় নি।
cboettig

2
@ cboettig এটি অংশ নয় ActiveSupport, এটি সংজ্ঞায়িত হয়েছে ActionView::Helpers::DateHelper
মাইকেল কোহল

19
আপনি যদি রেল কনসোলে থাকেন তবে আপনাকে 'অ্যাক্টিভ_সপোর্ট' প্রয়োজন হবে না। এমন একটি কনসোল পদ্ধতি রয়েছে helperযা আপনি কল করতে এবং এই পদ্ধতিগুলি অ্যাক্সেস করতে পারেন। helper.time_ago_in_words(timestamp)
ম্যাট পলিটো

2
জাস্ট ফাই, যদি আপনি এটি আইআরবি, বা প্লেইন রুবিতে চান তবে কেবল একটি করুন: require 'active_support/core_ext' প্রথমে, এবং তারপরে আপনি সমস্ত 7.days.agoঅন্যান্য অনুরূপ নির্মাণ এবং ব্যবহারের জন্য প্রস্তুত।
likethesky

1
মহান! আমি সবেমাত্র কিছু নমুনা কোড প্রত্যাশা করে এখানে এসেছি এবং এটি পেয়েছি I আমি রুবি এবং রেলসকে ভালবাসি
মার্সেলো বিফফারা

53

আমি এটি লিখেছি, তবে বিদ্যমান পদ্ধতিগুলি আরও ভাল কিনা তা পরীক্ষা করে দেখতে হবে।

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

1
হুম, আমি প্রথম রুবি পড়ি, এবং রুবির বাক্সের বাইরে অ্যাক্টিভসপোর্ট নেই। সুতরাং আমি মনে করি এই পোস্টটি আরও রুবি। তবে আসল প্রশ্নে রেলের উল্লেখ রয়েছে।
জোনকে

রেলগুলি একটি ওয়েব কাঠামো এবং অন্তর্নিহিত ভাষা রুবি। সুতরাং রেলের প্রশ্নে কিছু রুবি কোড পাওয়া স্বাভাবিক। এমনকি স্ট্যান্ডার্ড রুবিতে অ্যাক্টিভেকর্ড অন্তর্ভুক্ত না থাকলেও এটি কেবল একটি "রত্ন ইনস্টল অ্যাক্টিভেকর্ড" কমান্ড দ্বারা সমর্থিত।
মিকেলএফএম

7
আপনি returnনীচের caseস্টেটমেন্টের মধ্যে শেষ লাইনটি রাখতে elseপারেন এবং সমস্ত returnগুলি মুছে ফেলতে পারেন ।
সাওয়া

2
কেউ বলতে পারেন কেন আছে +99 +800 +180000?
গৌরব শাহ

+৯৯৯ কারণ "এক ঘন্টা আগে" এর সমাপ্তিটি 00১০০ এ শেষ হয় যা দুই ঘন্টা থেকে 100 সেকেন্ডের সংক্ষিপ্ত। একইভাবে, +800, যেহেতু 172000 দুটি দিনের (172800 সেকেন্ড) এর 800 সেকেন্ডের সংক্ষিপ্ত, এবং আরও অনেক কিছু।
ফ্রেড

22

সময়_গো_ইন_ওয়ার্ডগুলি ব্যবহারের জন্য অ্যান্ড্রু মার্শালের সমাধানটি কেবল স্পষ্ট করতে
( 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 ত্রয়ী। (আমি একমত নই তবে রোমে কখন ...)


20

কি সম্পর্কে

30.seconds.ago
2.days.ago

বা আপনি অন্য কিছু জন্য শুটিং ছিল?


19
প্রশ্নটি যা বলছে তা থেকে এটি পিছনে।
xaxxon

12

আপেক্ষিক সময় করতে আপনি গাণিতিক অপারেটরগুলি ব্যবহার করতে পারেন।

Time.now - 2.days 

আপনাকে 2 দিন আগে দেবে।


10
আপনি কি 2.days.ago সম্পর্কে জানতেন?
ওয়েবম্যাট

2
`টাইম.নু + ২.দিন” এর জন্য কি শর্টহ্যান্ড পদ্ধতি আছে?
স্টিফান

23
@ নিক্সনিজা: 2.days.sinceবা2.days.from_now
ব্রায়ান

5
এই প্রশ্নটি যা জিজ্ঞাসা করেছিল তার থেকে পিছনে। সময়_গো_ইন_ওয়ার্ডস হ'ল প্রশ্নের উত্তর।
xaxxon

তোমাকে অনেক ধন্যবাদ.
জিগার ভট্ট

10

এরকম কিছু কাজ করবে।

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

11
এটি মূলত দূরত্বের_পরে_সময়ের_ইন_ওয়ার্ডস সহায়তার
গ্র্যান্ট হাচিন্স

2
যার অর্থ আপনার এটি ব্যবহার করা উচিত নয় এবং আপনার বিল্ট-ইন
xaxxon

এটা আমার কাছে পুরোপুরি ঠিক আছে। এটি আপনাকে বাকী স্ট্রিংগুলি কাস্টমাইজ করতে দেয়। অর্থাত "3 সেকেন্ড আগে" বনাম "3s পূর্বে"
raidfive

#{diff_seconds/360}হওয়া উচিত #{diff_seconds/3600}। আমি এটি সম্পাদনা করেছি।
Femaref

7

যেহেতু এখানে সর্বাধিক উত্তর সময়_গো_ইন_ওয়ার্ডগুলি প্রস্তাব করে

পরিবর্তে ব্যবহার করুন:

<%= 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/


1
আসলে, এটা time_ago_in_wordsনা সময় এস
23tux

6

এখানে উদাহরণ পদ্ধতিগুলি একবার দেখুন:

http://apidock.com/rails/Time

এর দরকারী পদ্ধতি রয়েছে যেমন গতকাল, আগামীকাল, সূচনা_আর_উইক, পূর্ব, ইত্যাদি has

উদাহরণ:

Time.now.yesterday
Time.now.ago(2.days).end_of_day
Time.now.next_month.beginning_of_month

1

আমি একটি রত্ন লিখেছি যা রেল অ্যাক্টিভেকর্ড অবজেক্টের জন্য এটি করে। উদাহরণটি তৈরি করা_টাকে ব্যবহার করে তবে এটি আপডেট_আট বা ক্লাস অ্যাক্টিভসপোর্ট :: টাইম উইথজোন সহ কিছুতে কাজ করবে।

আপনার টাইমবিথজোন উদাহরণটিতে কেবল মণি ইনস্টল করুন এবং 'সুন্দর' পদ্ধতিটি কল করুন।

https://github.com/brettshollenberger/hublot


1

যদি আপনি একটি রেল অ্যাপ্লিকেশন তৈরি করে থাকেন তবে আপনার ব্যবহার করা উচিত

Time.zone.now
Time.zone.today
Time.zone.yesterday

এটি আপনাকে সময়সীমার সময় বা তারিখ দেয় যা দিয়ে আপনি আপনার রেল অ্যাপ্লিকেশন কনফিগার করেছেন।

উদাহরণস্বরূপ, আপনি যদি ইউটিসি ব্যবহারের জন্য আপনার অ্যাপ্লিকেশনটি কনফিগার করেন তবে Time.zone.nowসর্বদা ইউটিসি সময় হবে (উদাহরণস্বরূপ ব্রিটিশ গ্রীষ্মকালীন পরিবর্তন দ্বারা এটি প্রভাবিত হবে না)।

আপেক্ষিক সময় গণনা করা সহজ, যেমন

Time.zone.now - 10.minute
Time.zone.today.days_ago(5)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.