2010-05-18 18 views
30

मैं खुद को Django सिखाने के लिए एक छोटे फिटनेस ट्रैकर पर काम कर रहा हूँ। मैं समय के साथ अपना वजन ग्राफ करना चाहता हूं, इसलिए मैंने पाइथन Google चार्ट्स रैपर का उपयोग करने का निर्णय लिया है। Google चार्ट की आवश्यकता है कि आप अपनी तिथि को x समन्वय में परिवर्तित करें। ऐसा करने के लिए, मैं अपने वजन में पिछले वजन से पहले वजन घटाने और उसके बाद एक्स कॉर्ड को समझने के लिए इसका उपयोग करके अपने डेटासेट में दिनों की संख्या लेना चाहता हूं (उदाहरण के लिए, मैं परिणामस्वरूप 100 कर सकता हूं और वृद्धि कर सकता हूं प्रत्येक वाई समन्वय के परिणामस्वरूप संख्या द्वारा एक्स समन्वय।)मैं Django/पायथन में दो तिथियों को घटाना कैसे करूं?

वैसे भी, मुझे यह पता लगाने की आवश्यकता है कि Django डेटाटाइम ऑब्जेक्ट्स को एक दूसरे से कैसे घटाया जाए और अब तक, मैं Google और यहां दोनों स्टैक पर हड़ताली हूं। मुझे PHP पता है, लेकिन ओओ प्रोग्रामिंग पर कभी भी एक संभाल नहीं मिला है, इसलिए कृपया मेरी अज्ञानता से क्षमा करें।

class Goal(models.Model): 
    goal_weight = models.DecimalField("Goal Weight", 
     max_digits=4, 
     decimal_places=1) 
    target_date = models.DateTimeField("Target Date to Reach Goal") 
    set_date = models.DateTimeField("When did you set your goal?") 
    comments = models.TextField(blank=True) 

    def __unicode__(self): 
     return unicode(self.goal_weight) 

class Weight(models.Model): 
    """ Weight at a given date and time. """ 

    goal = models.ForeignKey(Goal) 
    weight = models.DecimalField("Current Weight", 
     max_digits=4, 
     decimal_places=1) 
    weigh_date = models.DateTimeField("Date of Weigh-In") 
    comments = models.TextField(blank=True) 

    def __unicode__(self): 
     return unicode(self.weight) 

    def recorded_today(self): 
     return self.date.date() == datetime.date.today() 

कैसे ध्यान में रखते हुए आगे बढ़ने के लिए पर कोई भी विचार: यहाँ क्या अपने मॉडल की तरह लग रही है? बहुत बहुत धन्यवाद!

उत्तर

54

तुम बस सीधे दिनांकों घटा सकते है, जो एक datetime.timedelta वस्तु निकलेगा:

dt = weight_now.weight_date - weight_then.weight_date 

एक timedelta वस्तु के लिए दिन, सेकंड, और माइक्रोसेकंड खाने हैं। वहां से, आप उचित गणित कर सकते हैं।

hours = dt.seconds/60/60 # Returns number of hours between dates 
weeks = dt.days/7    # number of weeks between dates 
+0

बिल्कुल सही, बहुत बहुत धन्यवाद। इस लगभग verbatim इस्तेमाल किया। –

31

Django datetime ऑब्जेक्ट्स नियमित रूप से Python datetime objects हैं। जब आप किसी अन्य से datetime घटाते हैं तो आपको timedelta ऑब्जेक्ट मिलता है।

यदि आप datetime से समय की लंबाई घटाना चाहते हैं तो आपको timedelta ऑब्जेक्ट से घटाएं। उदाहरण के लिए:

>>> from datetime import datetime, timedelta 
>>> now = datetime.now() 
>>> print now 
2010-05-18 23:16:24.770533 
>>> this_time_yesterday = now - timedelta(hours=24) 
>>> print this_time_yesterday 
2010-05-17 23:16:24.770533 
>>> (now - this_time_yesterday).days 
1 
+0

यह बहुत अच्छा है। बहुत बहुत धन्यवाद ... मैं स्ट्रिंग्स में सोचने के लिए इतना उपयोग करता हूं, मुझे नहीं लगता था कि ऑब्जेक्ट दो अन्य ऑब्जेक्ट्स घटाकर उत्पन्न किया जा सकता है। –

3

नोट घटाकर उस मामले में काम नहीं करेगा दो तारीख बार बिना (देशी), विभिन्न ऑफसेट-जागरूकता जैसे tzinfo साथ एक और एक उदाहरण के लिए:।

+0

यह प्रश्न का उत्तर नहीं है। यदि आपके पास जो कुछ कहा गया है, उसमें जोड़ने के लिए कुछ है तो किसी अन्य उत्तर पर एक टिप्पणी छोड़ दें – FistOfFury

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