【问题标题】:How to subtract two date and get the number of days in annotate?如何减去两个日期并获得注释中的天数?
【发布时间】:2018-12-26 08:33:15
【问题描述】:

我正在查询从某人购买新手机之日到今天的天数。

device_record = Devc.objects.annotate(duration = todays_date - F('datebuy'))\
    .order_by('datebuy')

当我检索数据时,我得到了这个 3150 days, 20:08:00

我只想显示number of days,如何删除时间?

我试过了:

device_record = Devc.objects.annotate(duration = (todays_date - F('datebuy')).days)\
        .order_by('datebuy')

返回的错误: 'F' object has no attribute 'days'

我这样定义 todays_date todays_date = datetime.now().date()datebuyDateTimeField

【问题讨论】:

  • todays_date 的类型是什么?也许这有帮助subtrack two dates
  • 我这样定义 todays_date todays_date = datetime.now().date()datebuyDateTimeField
  • @Samantha 你有没有找到解决办法?

标签: django django-views


【解决方案1】:

您可以尝试减去时间戳,然后检索日期。

from datetime import datetime, timedelta

now = datetime.now()
yesterday =  now - timedelta(days=1)
duration = now - yesterday

print duration.days

输出:

1

【讨论】:

    【解决方案2】:

    如果您只需要用户购买手机的天数。你可以这样查询 device_record = Devc.objects.order_by('datebuy')

    然后在模板中 {{ your_date_field|timesince:current_date_taht_can_be_return_from_view }}

    【讨论】:

      【解决方案3】:
      device_record = Devc.objects.annotate(duration = todays_date - F('datebuy')).order_by('datebuy')
      
      device_record = device_record.annotate(duration_in_days = F('duration__day'))
      

      【讨论】:

      • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请编辑您的答案以添加解释并说明适用的限制和假设。
      【解决方案4】:
      
      from django.db.models.functions import Cast, ExtractDay, TruncDate
      
      device_record = Devc.objects.annotate(
          duration = Cast(
              ExtractDay(
                  TruncDate(todays_date) - TruncDate(F('datebuy'))
              ),
              IntegerField()
          ).order_by('datebuy')
      

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2012-11-04
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多