2010-07-23 14 views
16

मैं घंटों में कहने के लिए एक साधारण कार्य लिखना चाहता हूं:आप डेटाटाइम से कैसे घटाते हैं?

यह बनाया गया है के बाद से कितना समय बीत चुका है?

मेरे प्रयास:

-time = DateTime.now.hour - (self.created_at.hour) 

किसी को भी कैसे पर रूबी में यह करने के लिए पता है?

+0

यह काम नहीं करेगा क्योंकि आप केवल घंटों की तुलना कर रहे हैं, इसलिए यदि एक दिन से अधिक गुजरता है तो यह गलत होगा, लेकिन अन्यथा इसे अभी भी एक संख्या की गणना करनी चाहिए। इसके बजाय आप सीधे 'DateTime.now - self.created_at' कर सकते हैं, जो आपको सेकंड में समय अंतर देगा। तुम्हें क्या करने की ज़रूरत है? – Karl

+0

यह काम नहीं करता है क्योंकि आप डेटटाइम से घटा नहीं सकते हैं जब तक कि यह एक स्ट्रिंग न हो। और यदि यह एक स्ट्रिंग है, तो आप इसे एक बार फिर से कैसे प्रदर्शित करते हैं – Trip

उत्तर

21

रेल आमतौर पर Time, नहीं DateTime उपयोग करता है। आप Time.now - self.created_at क्यों नहीं करते? फिर आप 3600 तक विभाजित करके सेकंड से घंटों में परिवर्तित कर सकते हैं।

7

आप time_ago_in_words (from_time, include_seconds = false) फ़ंक्शन ढूंढ रहे हैं। यहाँ डॉक्स से कुछ उदाहरण हैं:

time_ago_in_words(3.minutes.from_now)  # => 3 minutes 
time_ago_in_words(Time.now - 15.hours)  # => 15 hours 
time_ago_in_words(Time.now)     # => less than a minute 
from_time = Time.now - 3.days - 14.minutes - 25.seconds  # => 3 days 
+4

मैं शब्दों की तलाश नहीं कर रहा हूं। मैं देख रहा हूं कि डेटटाइम को किसी अन्य डेटटाइम – Trip

+1

से घटाएं कि उस मामले में मैकिड का सही उत्तर है। – sosborn

16

समझ गया! सबसे पहले आपको यह सुनिश्चित करना होगा कि आपका डेटा उसी डेटा में है, यह एक समय या डेटटाइम से घटाया जाएगा। मैंने समय चुना फिर आप इसे रूबी के समयबद्ध तरीकों से विभाजित करते हैं। यह कितने दिनों में अनुवाद करता है, लेकिन यह भी हो सकता है, 1. आपका। इत्यादि

(Time.now - self.created_at.to_time)/1.day 
संबंधित मुद्दे