2009-06-14 16 views
30

मान लीजिए मेरे पास मानक Post.first.created_at डेटाटाइम है। मैं प्रारूप 2009-06-03 16:57:45.608000 -04:00 में एक datetime के साथ सीधे कि तुलना कर सकते हैं की तरह कुछ कर रही द्वारा:रेलों की तारीखों की तुलना

Post.first.created_at > Time.parse("2009-06-03 16:57:45.608000 -04:00") 

संपादित करें: दोनों क्षेत्रों datetimes, नहीं दिनांकों हैं।

उत्तर

41

हाँ, आप दिनांक उदा .:

irb(main):018:0> yesterday = Date.new(2009,6,13) 
=> #<Date: 4909991/2,0,2299161> 
irb(main):019:0> Date.today > yesterday 
=> true 

तुलना करने के लिए तुलना ऑपरेटरों का उपयोग कर सकते हैं लेकिन अगर आप एक datetime के लिए एक तिथि की तुलना करने की कोशिश कर रहे हैं?

यदि ऐसा है, तो आप डेटाटाइम को एक तारीख में कनवर्ट करना चाहते हैं, फिर तुलना करें।

मुझे उम्मीद है कि इससे मदद मिलती है।

+3

बस एक नोट: रेलों की तुलना अन्य लोगों के खिलाफ डेटाटाइम ऑब्जेक्ट्स की तुलना में बहुत अप्रत्याशित परिणाम दे सकती है। विशेष रूप से ... नीचे देखें: 'p.created_at # शुक्र, 28 अगस्त 2015 21:45:14 यूटीसी +00: 00' ' p.updated_at # शुक्र, 28 अगस्त 2015 21:45:14 यूटीसी +00: 00 ' ' p.created_at == p.updated_at # false' तो आपको यह करना है ... 'p.created_at.to_i == p.updated_at.to_i # true' यहां अधिक जानकारी: http: // stackoverflow .com/प्रश्न/19599792/की तुलना समान-दिनांक-वस्तुओं में माणिक क्यों-हैं-इन-दो datetime-nows – bwest87

9

हां आप नियमित एक्टिव रिकॉर्ड्स दिनांक/समय फ़ील्ड के नियमित DateTime ऑब्जेक्ट (जैसे कि आप जिस स्ट्रिंग को पार्स कर सकते हैं) के साथ सीधे तुलना कर सकते हैं।

एक परियोजना मैं एक मूल्य वस्तु एक created_at datetime वस्तु है कि राशि में:

imac:trunk luca$ script/console 
Loading development environment (Rails 2.3.2) 
>> Value.first.created_at 
=> Fri, 12 Jun 2009 08:00:45 CEST 02:00 
>> Time.parse("2009-06-03 16:57:45.608000 -04:00") 
=> Wed Jun 03 22:57:45 0200 2009 
>> Value.first.created_at > Time.parse("2009-06-03 16:57:45.608000 -04:00") 
=> true 

created_at क्षेत्र के रूप में परिभाषित किया गया है:

create_table "values", :force => true do |t| 
    [...] 
    t.datetime "created_at" 
    end 

N.B.

:

Post.first.created_at > Date.parse("2009-06-03 16:57:45.608000 -04:00") 

अन्यथा आप एक मिल जाएगा: एक तारीख को पार्स

Post.first.created_at.to_time > Time.parse("2009-06-03 16:57:45.608000 -04:00") 

या: यदि आपके क्षेत्र एक तारीख और नहीं एक datetime है, तो आप इसे एक समय में रूपांतरित करने की जरूरत है

ArgumentError: comparison of Date with Time failed 
संबंधित मुद्दे