2011-08-20 12 views
6

मैं कुछ समय के लिए मेरे डेटाबेस से परिभाषित किया है पर गहरे लाल रंग का में तारीख खुदाई, और यह कि यह कैसा दिखता है:समय की तुलना करना या रेल

ruby-1.9.2-p290 :017 > djel.smjena.pocetak1.to_time 
=> 2000-01-01 08:00:00 +0100 

और कहा कि ठीक है, यह मेरे 2000/01/01 भी सौंपा , मैं कुछ है कि कुछ datetime

ruby-1.9.2-p290 :019 > dog.pocetak 
=> Thu, 25 Aug 2011 08:18:00 UTC +00:00 

तो मुझे उम्मीद थी, कि .to_time मेरी तारीख खाई हैं में हुआ है, लेकिन है कि नहीं हो करता

ruby-1.9.2-p290 :020 > dog.pocetak.to_time 
=> Thu, 25 Aug 2011 08:18:00 UTC +00:00 

तो, अब, 8:00 से पहले कुछ हुआ तो तुलना करना बेकार है। तो, मैं इसकी तुलना कैसे कर सकता हूं? क्या dog.pocetak को 2000-01-01 पर टच घड़ी के बिना सेट करने का कोई तरीका है?

धन्यवाद

पेज। भी, मैंने नए समय परिवर्तनीय बनाने के बारे में सोचा, केवल पुराने परिवर्तनीय घंटों और मिनटों से प्राप्त करने के लिए, लेकिन यह विधियां काम नहीं करतीं?

ruby-1.9.2-p290 :059 > dog.pocetak.hour 
=> 8 

लेकिन

ruby-1.9.2-p290 :060 > dog.pocetak.minute 
NoMethodError: undefined method `minute' for 2011-08-25 08:18:00 UTC:Time 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.10/lib/active_support/time_with_zone.rb:322:in `method_missing' 
     from (irb):60 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands/console.rb:44:in `start' 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands/console.rb:8:in `start' 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands.rb:23:in `<top (required)>' 
     from script/rails:6:in `require' 
     from script/rails:6:in `<main>' 
ruby-1.9.2-p290 :061 > dog.pocetak.minutes 
NoMethodError: undefined method `minutes' for 2011-08-25 08:18:00 UTC:Time 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.0.10/lib/active_support/time_with_zone.rb:322:in `method_missing' 
     from (irb):61 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands/console.rb:44:in `start' 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands/console.rb:8:in `start' 
     from /home/dorijan/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.10/lib/rails/commands.rb:23:in `<top (required)>' 
     from script/rails:6:in `require' 
     from script/rails:6:in `<main>' 

वास्तव में निराशा होती :)

उत्तर

3
ActiveSupport साथ

और Time.change आप वर्ष, माह और दिन रीसेट कर सकते हैं यदि आप चाहें:

> t = Time.now 
=> Sun Aug 21 00:46:29 +0000 2011 
> t.change(:month => 1, :day => 1, :year => 2000) 
=> Sat Jan 01 00:46:29 +0000 2000 

इस तरह आप तुलना कर सकते हैं "कई बार" एक दूसरे के बीच, अगर वे सब रीसेट की गई थीं एक ही तारीख यह सुनिश्चित नहीं है कि यह एक अच्छा समाधान है, लेकिन आप जो वास्तव में खोज रहे हैं उस पर निर्भर करता है।

संपादित:

प्रति म्यू के सुझाव के रूप में आप भी time डेटा प्रकार पर एक नज़र ले सकता है।

+0

आपका जवाब :) – user899119

+0

दोनों [PostgreSQL] (http://www.postgresql.org/docs/9.0/interactive/datatype-datetime के लिए धन्यवाद। एचटीएमएल) और [MySQL] (http://dev.mysql.com/doc/refman/5.6/en/time.html) में 'टाइम' डेटा प्रकार हैं, PostgreSQL में एक अंतराल प्रकार भी है (MySQL का' टाइम' डबल ड्यूटी करता है दिन और अंतराल के समय के लिए)।मैं उम्मीद करता हूं कि अन्य डेटाबेस समान प्रकार के हों (सभी संक्षेप में असंगत हालांकि, मानकों और यह सब :)। –

+0

@mu - स्पष्टीकरण के लिए धन्यवाद mu। मुझे यह कैसे याद आया..हां। नींद की ज्यादा जरुरत हैं। संपादित। – Casper

3

एक समय वस्तु से कुछ ही मिनटों के लिए, आप min नहीं minutes चाहते हैं। आप एक समय उदाहरण है कि सिर्फ एक "दिन के समय" (यानी कोई वर्ष, माह, ...) नहीं हो सकता है, लेकिन आप strftime का उपयोग एक स्ट्रिंग संस्करण है जो ठीक से तुलना करेंगे पाने के लिए कर सकते हैं:

tod = Time.now.strftime('%H:%M:%S') 
# "17:07:23" 

if(t1.strftime('%H:%M:%S') == t2.strftime('%H:%M:%S')) 
    # Same time of day (to one second resolution) 
end 

या आप तुलना कर सकते हैं व्यक्तिगत hour, min, और sec घटकों:

if(t1.hour == t2.hour && t1.min == t2.min && t1.sec == t2.sec) 
    # Same time of day (to one second resolution) 
end 

जो तुम पर पहुंचते हैं, ले निर्भर करता है, हमेशा की तरह अपने विशिष्ट स्थिति और और क्या है कि आसपास के क्षेत्र में में जा रहा है पर।

+0

धन्यवाद ... कि मदद की :) – user899119

+0

strftime अद्भुत है – jschorr

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