Django中两个datetime之间的筛选

2024-09-29 17:12:58 发布

您现在位置:Python中文网/ 问答频道 /正文

在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”,以便在转换为GMT+8后获得起始日期为“2021-10-23T00:00:00Z”,结束日期为“2021-10-23T23:59:59.999Z”

下面是models.py中会员卡的型号

class MemberCard(models.Model):
    createDate = models.DateTimeField(default=timezone.now)

想知道我写的上面的代码有什么问题吗?或者,对于这个问题,任何更好的解决方案都是非常受欢迎的

First four recordsLast four records


Tags: 代码inmodelsrequestitempostnowstatistics
1条回答
网友
1楼 · 发布于 2024-09-29 17:12:58
from datetime import datetime, timedelta

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() + timedelta(days=1)
statistics = models.MemberCard.objects.filter(createDate__range=(startDate, endDate)).order_by("-createDate")

请注意,这适用于整个日期,但我认为这是您想要的

相关问题 更多 >

    热门问题