[Fixed]-Compare date and datetime in Django

15👍

There may be a more proper solution, but a quick workup suggests that this would work:

from datetime import timedelta

start_date = timezone.now().date()
end_date = start_date + timedelta( days=1 ) 
Entry.objects.filter(created__range=(start_date, end_date))

I’m assuming timezone is a datetime-like object.

The important thing is that you’re storing an exact time, down to the millisecond, and you’re comparing it to something that only has accuracy to the day. Rather than toss the hours, minutes, and seconds, django/python defaults them to 0. So if your record is createed at 2011-4-6T06:34:14am, then it compares 2011-4-6T:06:34:14am to 2011-4-6T00:00:00, not 2011-4-6 (from created date) to 2011-4-6 ( from timezone.now().date() ). Helpful?

28👍

Since somewhere in 2015:

YourModel.objects.filter(some_datetime__date=some_date)

i.e. __date after the datetime field.

https://code.djangoproject.com/ticket/9596

👤MZA

0👍

Try this

from datetime import datetime
now=datetime.now()
YourModel.objects.filter(datetime_published=datetime(now.year, now.month, now.day))

Leave a comment