2010-11-14 6 views
13

के साथ तारीखों को घटाकर मैं बस रूबी पर एक नज़र डाल रहा हूं और तारीख/समय की चीज़ के साथ खेल रहा था।रूबी

irb(main):001:0> jamis_DOB = Time.mktime(2003, 10, 22, 06, 59) 
=> Wed Oct 22 06:59:00 +0300 2003 
irb(main):002:0> age = Time.now - jamis_DOB 
=> 222934108.172989 
irb(main):005:0> age_in_years = (((age/3600)/24)/365).to_i 
=> 7 

तो मेरी उदाहरण अगर वहाँ लीप वर्ष के रूप में उन वर्षों से जोड़ रहे हैं पता नहीं होगा AGE_IN_YEARS के रूप में बहुत अच्छा नहीं है। मैं कुछ googled समय/तारीख ट्यूटोरियल के माध्यम से किया गया है और दो तारीखों को घटाने और इसे एक साल, महीनों, दिन आदि ... प्रारूप में वापस करने का एक आसान तरीका नहीं मिला है। मुझे लगता है कि रूबी में इस तरह की चीज़ के लिए एक ऐड-ऑन या कुछ अंतर्निहित है। क्या कोई मुझे बता सकता है कि यह क्या है? (साथ ही, भविष्य में संदर्भ के लिए इस प्रकार की चीज़ों के उत्तर कैसे प्राप्त करें?)

धन्यवाद।

उत्तर

29

आप Date बजाय Time हैं:

require 'date' 

now = Date.today 
before = Date.civil(2000, 1, 1) 
difference_in_days = (now - before).to_i 

(difference_in_days/365.25).to_i 

तुम आज और 1 जनवरी 2000 के बीच के वर्षों में अंतर देंगे यह शायद सुधार किया जा सकता, मैं सिर्फ प्रति वर्ष दिनों की औसत संख्या का इस्तेमाल किया (365.25), जो चरम किनारे के मामलों को छोड़कर आपको सही उत्तर देगा।

require 'date' 

years = 0 
d = Date.civil(2000, 1, 1) 
loop do 
    d = d.next_year 
    break if Date.today < d 
    years += 1 
end 

लेकिन Date#next_year, रूबी 1.9 में पेश किया गया था तो यह 1.8.7 में काम नहीं होगा:

तुम भी कुछ इस तरह कर सकते हैं।

बेशक

, दो तिथियों के बीच वर्षों की संख्या का निर्धारण सिर्फ संख्या घटाकर है सबसे आसान तरीका:

2010 - 2000 # => 10 
+0

धन्यवाद थियो :) आपका 3 सुझाव मुझे ऐसा करने के लिए प्रेरित ... की आवश्यकता होती है ' तारीख ' date_now = Date.today जन्म तिथि = Date.civil (2003, 10, 22) अगर date_now.month> dob.month उम्र = date_now.year - dob.year elsif date_now.month == जन्म तिथि .month && date_now.day> dob.day उम्र = date_now.year - dob.year बाकी उम्र = (date_now.year - dob.year) - 1 अंत अंत प्रिंट "सही उम्र है:", आयु, "\ n" मैं वास्तव में आपके दूसरे सुझाव को वास्तव में समझ नहीं सका और ऐसा लगता है कि इसके साथ खेलने के लिए 1.9 चल रहा है। – Leke

+0

हां, आप सही हैं, आखिरी उदाहरण में महीने और दिन को भी ध्यान में रखना है। मध्य उदाहरण लूप में प्रत्येक मोड़ के लिए केवल एक वर्ष का कदम उठाता है और मोड़ों की गणना करता है। मैंने इसे थोड़ा और सही करने के लिए बदल दिया है। – Theo

+2

मुझे इस बात के बारे में काफी उलझन में आ रहा था कि रूबी हमेशा मेरी तिथि घटाने के बाद '/ 1' क्यों लौट रही थी, जैसा कि ऊपर वर्णित परिणाम पर' to_i' करना महत्वपूर्ण था, ताकि मूल्य को कई दिनों के रूप में प्राप्त किया जा सके। – waffl