Query datetime by today's date in Django

Question:

I’m saving datetime in the db for an object. I’d like to query against the db and select anything from todays date, not datetime.

What’s the easiest way to do this? This doesn’t work:

invoice_for_today = Invoice.objects.get(user=user, date=date.today())
Asked By: Brenden

||

Answers:

Try using the keys date__gte and date__lte. You can pass in two datetime objects marking the boundaries of what you want to match.

Answered By: jtbandes

I remember there being plans to add a __date field lookup to make this easier, but as it stands the “standard” way of doing it is

today_min = datetime.datetime.combine(datetime.date.today(), datetime.time.min)
today_max = datetime.datetime.combine(datetime.date.today(), datetime.time.max)
Invoice.objects.get(user=user, date__range=(today_min, today_max))
Answered By: Ismail Badawi

You can also do something like this:

today = date.today()
invoice_for_today = Invoice.objects.filter(date__year=today.year, date__month=today.month, date__day=today.day)
Answered By: Peppelorum
obj = TeachersPlanner.objects.filter(date__startswith=date.today())
Answered By: Rajan Mandanka

There is a new __date field lookup in Django 1.9 you can use:

Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1))
Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1))

Queryset API

Answered By: Alexander Truslow

in django<1.9

from django.utils.timezone import datetime #important if using timezones
today = datetime.today()
foo_for_today = Foo.objects.filter(datefield__year=today.year, datefield__month=today.month, datefield__day=today.day)

in django>1.9, as they added the date keyword

foo_for_today = Foo.objects.filter(datefield__date=datetime.date.today())
Answered By: Marco Silva

To get entries from the Last 24 hours you can use:

from datetime import datetime, timedelta

Entry.objects.filter(pub_date__gte = datetime.now() - timedelta(days=1)) 
Answered By: Gal Bracha
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.