How do I subtract two dates in Django/Python?
date, datetime, django, python, time
Solution
You can just subtract the dates directly, which will yield a `datetime.timedelta` object:
dt = weight_now.weight_date - weight_then.weight_date
A `timedelta` object has fields for days, seconds, and microseconds. From there, you can just do the appropriate math. For example:
hours = dt.seconds / 60 / 60 # Returns number of hours between dates
weeks = dt.days / 7 # number of weeks between dates
Problem
I'm working on a little fitness tracker in order to teach myself Django. I want to graph my weight over time, so I've decided to use the Python Google Charts Wrapper. Google charts require that you convert your date into a x coordinate. To do this I want to take the number of days in my dataset by subtracting the first weigh-in from the last weigh-in and then using that to figure out the x coords (for example, I could 100 by the result and increment the x coord by the resulting number for each y coord.) Anyway, I need to figure out how to subtract Django datetime objects from one another and so far, I am striking out on both google and here at the stack. I know PHP, but have never gotten a handle on OO programming, so please excuse my ignorance. Here is what my models look like: ``` 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() ``` Any ideas on how to proceed in the view? Thanks so much!