web-dev-qa-db-ja.com

Django / Pythonで2つの日付を減算するにはどうすればよいですか?

Djangoを自習するために、私は小さなフィットネストラッカーに取り組んでいます。体重を経時的にグラフ化するため、Python Google Charts Wrapperを使用することにしました。Googleチャートでは、日付をax座標に変換する必要があります。これを行うには、最初の計量を最後の計量から減算し、それを使用してx座標を計算することにより、データセットの日数(たとえば、結果によって100で、結果の数値でx座標をインクリメントできます各y座標。)

とにかく、Django datetimeオブジェクトを互いに引き算する方法を理解する必要があります。これまでのところ、私はグーグルとスタックの両方に注目しています。 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

日付を直接減算するだけで、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
60
mipadi

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
Dan Head

2つの日付時刻のオフセット認識が異なる場合(たとえば、1つはtzinfoあり、もう1つはなし(ネイティブ))、減算は機能しないことに注意してください。

4
Itkovian