如何按过去 24 小时后的时间过滤 Django 中的对象?
How to filter objects in Django by time since last 24 hours?
假设每天有一个从 00:00
到 00:00
的开始时间,根据当天,Django 对象按时间过滤的效果如何?我最初想出了这个:
from django.utils import timezone
yesterday = timezone.now() - timezone.timedelta(1)
qs = Foo.objects.filter(date__gte=yesterday)
##
yesterday = datetime.date.today() - datetime.timedelta(1)
qs = Foo.objects.filter(date__gte=yesterday)
然而,这并不是特别正确。我希望时间正好从 00:00
开始到 timezone.now()
- 所以类似于 Foo.objects.filter(date__range=[00:00, timezone.now()])
谢谢。
假设 date
字段实际上是 datetime
。
如果您需要 date
包含今天日期的所有记录,您可以使用 __date
:
qs = Foo.objects.filter(date__date=timezone.now())
如果你需要,例如,所有昨天的记录,但时间不大于timezone.now()
,这样:
qs = Foo.objects.filter(
date__date=timezone.now() - timezone.timedelta(1),
date__lte=timezone.now() - timezone.timedelta(1)
)
Yevgeniy Kosmak 的回答是正确的,使用 datetime_field__date=
过滤器。
您也可以在 timedelta 中使用 date/datetime - timedelta()
模式和其他参数,例如
timedelta(
days=50,
seconds=27,
microseconds=10,
milliseconds=29000,
minutes=5,
hours=8,
weeks=2
)
文档是 here
假设每天有一个从 00:00
到 00:00
的开始时间,根据当天,Django 对象按时间过滤的效果如何?我最初想出了这个:
from django.utils import timezone
yesterday = timezone.now() - timezone.timedelta(1)
qs = Foo.objects.filter(date__gte=yesterday)
##
yesterday = datetime.date.today() - datetime.timedelta(1)
qs = Foo.objects.filter(date__gte=yesterday)
然而,这并不是特别正确。我希望时间正好从 00:00
开始到 timezone.now()
- 所以类似于 Foo.objects.filter(date__range=[00:00, timezone.now()])
谢谢。
假设 date
字段实际上是 datetime
。
如果您需要 date
包含今天日期的所有记录,您可以使用 __date
:
qs = Foo.objects.filter(date__date=timezone.now())
如果你需要,例如,所有昨天的记录,但时间不大于timezone.now()
,这样:
qs = Foo.objects.filter(
date__date=timezone.now() - timezone.timedelta(1),
date__lte=timezone.now() - timezone.timedelta(1)
)
Yevgeniy Kosmak 的回答是正确的,使用 datetime_field__date=
过滤器。
您也可以在 timedelta 中使用 date/datetime - timedelta()
模式和其他参数,例如
timedelta(
days=50,
seconds=27,
microseconds=10,
milliseconds=29000,
minutes=5,
hours=8,
weeks=2
)
文档是 here