Фильтрация между двумя датами в django
Как отфильтровать записи, которые находятся между двумя датами включительно в django? У меня есть пример кода ниже, однако он не возвращает ожидаемых результатов.
# based on the Developer's Tool in Chrome,
# request.POST['startDate'] == '2021-10-22T16:00:00.000Z'
# request.POST['endDate'] == '2021-10-22T16:00:00.000Z'
startDate = timezone.now().strptime(request.POST['startDate'], '%Y-%m-%dT%H:%M:%S.%fZ')
endDate = timezone.now().strptime(request.POST['endDate'], '%Y-%m-%dT%H:%M:%S.%fZ')+timedelta(days=1, microseconds=-1)
statistics = models.MemberCard.objects.filter(createDate__gte=startDate, createDate__lte=endDate).order_by("-createDate")
if len(statistics) > 0:
for item in statistics:
dateFound.append(item.createDate)
Поскольку я ищу GMT+8, поэтому желаемая начальная дата '2021-10-22T16:00:00.000Z' и конечная дата '2021-10-23T15:59:59.999Z', чтобы получить '2021-10-23T00:00:00Z' для начальной даты и '2021-10-23T23:59:59.999Z' для конечной даты после преобразования в GMT+8
Хотелось бы узнать какие-либо проблемы с кодом выше, который я написал? Или любые лучшие решения для этой проблемы более чем приветствуются
Первые четыре записи Последние четыре записи
from datetime import datetime
startDate = datetime.strptime(request.POST['startDate'], '%Y-%m-%dT%H:%M:%S.%fZ').date()
endDate = datetime.strptime(request.POST['endDate'], '%Y-%m-%dT%H:%M:%S.%fZ').date()
statistics = models.MemberCard.objects.filter(createDate__range=(startDate, endDate)).order_by("-createDate")
Обратите внимание, что это работает для целых дат, но я думаю, что это то, что вам нужно.