2009-08-03 12 views
11

distance_of_time_in_words बहुत अच्छा है, लेकिन कभी-कभी यह पर्याप्त रूप से पर्याप्त नहीं है।अधिक सटीक दूरी_of_time_in_words

मुझे एक ऐसे फ़ंक्शन की आवश्यकता है जो शब्दों में सटीक दूरी की रिपोर्ट करेगी। उदा।, 7:50 पूर्वाह्न से 10:10 पूर्वाह्न "2 घंटे और 20 मिनट" की दूरी होनी चाहिए, न कि "लगभग 2 घंटे" या distance_of_time_in_words जो भी करेगी।

मेरा उपयोग केस ट्रेन शेड्यूल की रिपोर्ट कर रहा है, और विशेष रूप से दी गई ट्रेन की सवारी कितनी देर तक ले जाएगी।

+0

अपडेट किया गया लिंक:।। https://github.com/radar/dotiw भी बेहतर काम करता है, वास्तव में –

उत्तर

2
def distance_of_time_in_hours_and_minutes(from_time, to_time) 
    from_time = from_time.to_time if from_time.respond_to?(:to_time) 
    to_time = to_time.to_time if to_time.respond_to?(:to_time) 
    distance_in_hours = (((to_time - from_time).abs)/3600).round 
    distance_in_minutes = ((((to_time - from_time).abs) % 3600)/60).round 

    difference_in_words = '' 

    difference_in_words << "#{distance_in_hours} #{distance_in_hours > 1 ? 'hours' : 'hour' } and " if distance_in_hours > 0 
    difference_in_words << "#{distance_in_minutes} #{distance_in_minutes == 1 ? 'minute' : 'minutes' }" 
end 
+1

मैं लाइन बदल जाएगा ,210 distance_in_hours = (((TO_TIME - FROM_TIME) .abs)/3600) .round distance_in_hours = करने के लिए (((TO_TIME - FROM_TIME) .abs)/3600) .to_i दौर को ख़त्म कर और 1.5 घंटे कर देगा 2 घंटे 30 मिनट – theschmitzer

2

ऊपर कोड मेरी RubyMine उलझन में ... और मुझे यकीन है कि यह वास्तव में सही है नहीं कर रहा हूँ।


def distance_of_time_in_hours_and_minutes(from_time, to_time) 
    from_time = from_time.to_time if from_time.respond_to?(:to_time) 
    to_time = to_time.to_time if to_time.respond_to?(:to_time) 
    dist = to_time - from_time 
    minutes = (dist.abs/60).round 
    hours = minutes/60 
    minutes = minutes - (hours * 60) 

    words = dist <= 0 ? '' : '-' 

    words << "#{hours} #{hours > 1 ? 'hours' : 'hour' } and " if hours > 0 
    words << "#{minutes} #{minutes == 1 ? 'minute' : 'minutes' }" 
end 

यहाँ से ऊपर के लिए कुछ Rspec है:: इस प्रकार मैं इसे फिर से बनाया


describe "Distance of Time in Hours and Minutes" do 
    before do 
    @time1 = Time.utc(2010,"sep",7,14,15,3) 
    @time2 = @time1 + 28 
    @time3 = @time1 + 30 
    @time4 = @time1 + 60 
    @time5 = @time1 + 60*60 
    @time6 = @time1 + 60*60 + 60 
    @time7 = @time1 + 60*60 + 5*60 
    end 

    it "calculates time differences properly" do 
    distance_of_time_in_hours_and_minutes(@time1, @time1).should == "0 minutes" 
    distance_of_time_in_hours_and_minutes(@time1, @time2).should == "0 minutes" 
    distance_of_time_in_hours_and_minutes(@time1, @time3).should == "1 minute" 
    distance_of_time_in_hours_and_minutes(@time1, @time4).should == "1 minute" 
    distance_of_time_in_hours_and_minutes(@time1, @time5).should == "1 hour and 0 minutes" 
    distance_of_time_in_hours_and_minutes(@time1, @time6).should == "1 hour and 1 minute" 
    distance_of_time_in_hours_and_minutes(@time1, @time7).should == "1 hour and 5 minutes" 
    distance_of_time_in_hours_and_minutes(@time7, @time1).should == "-1 hour and 5 minutes" 
    distance_of_time_in_hours_and_minutes(@time3, @time1).should == "-1 minute" 
    end 
end 

(ध्यान दें कि मैं अपने कोडिंग पर्यावरण एक NoMethodError त्रुटि से बचने के लिए helper साथ distance_of_time_in_miles के आगे जोड़ते प्रत्येक मंगलाचरण था - कि अधिक जानकारी के लिए उदाहरण http://old.nabble.com/How-to-spec-a-Rails-helper-method-td20660744.html के लिए देख

+0

की तरह दिखें यह शब्द "शब्द = dist <= 0 नहीं है? '': '-' 'गलत तरीका है? अगर आप सकारात्मक हैं तो आप ऋण चिह्न वापस कर देते हैं, जबकि संभवतः आपको * को वापस करना चाहिए यदि dist नकारात्मक है। –

संबंधित मुद्दे