【问题标题】:Find Out A Datetime is Between Two Datetimes in Django [duplicate]在Django中找出一个日期时间在两个日期时间之间[重复]
【发布时间】:2016-06-28 11:29:42
【问题描述】:

我正在制作一个类似博客的平台,其中包括一个活动页面。我有一个模型如下:

class Event(models.Model):
    dtime_start = models.DateTimeField(null=False, blank=False)
    dtime_end = models.DateTimeField(null=False, blank=False)

假设我有一个名为event_main 的视图,它可以投影所有事件。但是,我想在页面顶部突出显示当前活动的事件。所以我需要的是:

  1. 获取客户端的准确请求datetime
  2. dtime_startdtime_end 之间过滤具有datetime 请求的Event 实例

我想到了包括for 循环在内的解决方案并将结果放入列表中,但是我真的不想将模型实例放入列表中,因为有QuerySets。在 Django 中有没有内置的方法可以做到这一点?

###############
# Environment #
###############
python 3.2.5
pypy 2.4.0
django 1.8.7

【问题讨论】:

    标签: python django datetime


    【解决方案1】:

    要获取客户端的请求日期时间,您可以:

    1. 依靠“日期”标头 (request.META.get('HTTP_DATE')),
    2. 依赖服务器当前日期和客户端timzone
    3. 回退到服务器的当前日期

    然后您可以像对整数一样使用常用查找进行过滤:

    Event.objects.filter(dtime_start__lte=request_datetime,
                         dtime_end__gte=request_datetime)
    

    【讨论】:

    • 注意事项:如果数据库中dtime_start和dtime_end为DATETIME,则需要设置传入的request_datetime对象的开始时间和结束时间,否则可能会错过@上的Events 987654324@ 和 gte(相等)日期结束。
    • 另外说明一下,我觉得应该是__lte__gte吧?
    • @ErayErdin,是的,当然,已修复。
    • @warath-coder,你是什么意思“request_datetime的开始时间和结束时间”?这是一个日期时间,而不是一个日期时间范围。
    • 我在想如果你想得到一整天的时间;我错过了阅读 OP 的要求。
    【解决方案2】:

    dtime_start <= input AND dtime_end >= output:

    Event.objects.filter(dtime_start__lte=datetime.date(y, m, d), dtime_start__gte=datetime.date(y, m, d))
    

    有关详细信息,请参阅documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      相关资源
      最近更新 更多