Как я вычитаю две даты в Django/Python?

Я работаю над небольшим средством отслеживания фитнеса, чтобы преподавать мне Django. Я хочу изобразить свой вес в виде графика со временем, таким образом, я решил использовать Обертку Диаграмм Google Python. Диаграммы Google требуют, чтобы Вы преобразовали свою дату в координату x. Чтобы сделать это, я хочу взять количество дней в своем наборе данных путем вычитания первого взвешивания из последнего взвешивания и затем использования этого для выяснения x проводов (например, я мог 100 результатом и увеличивать x coord получающимся числом для каждого y coord.)

Так или иначе я должен выяснить, как вычесть объекты даты и времени Django друг от друга и до сих пор, я зачеркиваю и на 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()

Какие-либо идеи о том, как продолжить двигаться в представлении? Большое спасибо!

35
задан jnns 9 August 2016 в 20:14
поделиться

2 ответа

Вы можете просто вычесть даты напрямую, что даст дату и время . Объект 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
60
ответ дан 27 November 2019 в 06:37
поделиться

Объекты Django datetime - это обычные объекты Python datetime . Когда вы вычитаете одно 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
33
ответ дан 27 November 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: