Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django/Python中如何减去两个日期?_Python_Django_Datetime_Date_Time - Fatal编程技术网

在Django/Python中如何减去两个日期?

在Django/Python中如何减去两个日期?,python,django,datetime,date,time,Python,Django,Datetime,Date,Time,我正在做一个小小的健身跟踪器来自学Django。我想绘制我的体重随时间的变化图,所以我决定使用Python Google图表包装器。谷歌图表要求您将日期转换为x坐标。为此,我想通过从最后一次称重中减去第一次称重来计算数据集中的天数,然后用它来计算x坐标(例如,我可以根据结果计算100,并根据每个y坐标的结果数增加x坐标) 无论如何,我需要弄清楚如何将Django datetime对象彼此相减,到目前为止,我在google和这里的堆栈上都有突出的表现。我懂PHP,但从来没有掌握过OO编程,所以请原

我正在做一个小小的健身跟踪器来自学Django。我想绘制我的体重随时间的变化图,所以我决定使用Python Google图表包装器。谷歌图表要求您将日期转换为x坐标。为此,我想通过从最后一次称重中减去第一次称重来计算数据集中的天数,然后用它来计算x坐标(例如,我可以根据结果计算100,并根据每个y坐标的结果数增加x坐标)

无论如何,我需要弄清楚如何将Django datetime对象彼此相减,到目前为止,我在google和这里的堆栈上都有突出的表现。我懂PHP,但从来没有掌握过OO编程,所以请原谅我的无知。以下是我的模型的外观:

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()

有没有关于如何在视图中继续的想法?非常感谢

Django
datetime
对象只是常规对象。当你从另一个
datetime
中减去一个时,你得到一个对象

如果要从
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
hours = dt.seconds / 60 / 60    # Returns number of hours between dates
weeks = dt.days / 7             # number of weeks between dates

您可以直接减去日期,这将生成一个
datetime.timedelta
对象:

dt = weight_now.weight_date - weight_then.weight_date
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
hours = dt.seconds / 60 / 60    # Returns number of hours between dates
weeks = dt.days / 7             # number of weeks between dates

请注意,如果两个日期时间具有不同的偏移感知,例如,一个有tzinfo,另一个没有(本机),则减法将不起作用。

这很好。非常感谢。。。我习惯于用字符串思考,我不认为可以通过减去另外两个对象来生成对象。这不是问题的答案。如果你有什么要补充的话,请在另一个答案上留下评论