Django/Python - 检查日期是不是在本周

Posted

技术标签:

【中文标题】Django/Python - 检查日期是不是在本周【英文标题】:Django/Python - Check a date is in current weekDjango/Python - 检查日期是否在本周 【发布时间】:2012-02-27 20:56:30 【问题描述】:

我想做这样的事情:

entries = Entry.objects.filter(created_at__in = current_week())

如何使它获得良好的性能。谢谢!

编辑:我仍然不知道current_week() 功能。

【问题讨论】:

为您的应用程序定义current_week。请编写定义“当前”周的第一天所需的代码行。考虑到这个定义,下周的第一天会很容易。 (有些人争论星期是从星期日还是星期一开始,以及从 1 月 1 日开始的偏移量如何。)请提供代码来定义 current week "current_week()函数我还是没有概念。如果不能定义“当前周”,就不能写程序。当前周的定义必须写在代码中。如果你不能这样做,你就不能编写一个测试用例,你也不能证明你的代码有效。如果你不能从用户、主管或产品所有者那里得到本周的定义,你就不能让这个代码工作。现在停止工作。得到一个定义。 【参考方案1】:

Django 1.11 开始,我们可以使用 week Field lookup:

Entry.objects.filter(created_at__week=current_week)

根据 ISO-8601,它将为您提供从星期一到星期日的一周。

查询当前周:

from datetime import date
current_week = date.today().isocalendar()[1] 

isocalendar() 将返回一个包含 3 个项目的元组:(ISO 年ISO 周数ISO 工作日)。

【讨论】:

这个答案是正确的问题。我一直在寻找如何知道生日是否在本周,因此它不起作用。因为每年的同一天在不同的周。【参考方案2】:

是的,这个问题是在 2 年前提出的。今天有了更多的经验,我建议使用arrow 处理日期时间的痛苦更少。

结帐:https://github.com/crsmithdev/arrow

【讨论】:

【参考方案3】:

使用__range。您需要先实际计算一周的开始和结束:

import datetime
date = datetime.date.today()
start_week = date - datetime.timedelta(date.weekday())
end_week = start_week + datetime.timedelta(7)
entries = Entry.objects.filter(created_at__range=[start_week, end_week])

【讨论】:

正如 S.Lott 所指出的,“周”有多种解释。 @DanielRoseman 在这里的回答假定 Python 默认为从星期一开始的几周。 你不会使用 6 而不是 7 作为 timedelta 吗?星期一 = 0 和星期日 = 6

以上是关于Django/Python - 检查日期是不是在本周的主要内容,如果未能解决你的问题,请参考以下文章

在 django python 中添加新卡之前,我如何检查 Stripe 客户是不是已经拥有特定卡

Django/Python“django.core.exceptions.ImproperlyConfigured:无法导入‘联系人’。检查‘...apps.contact.apps.ContactC

收到错误:MIME 类型 ('text/html') 不是受支持的样式表 MIME 类型,并且使用 DJANGO PYTHON 启用了严格的 MIME 检查

Django/Python - 用文字而不是数字显示月份

Django/Python 在 DateTimeField 上设置最小/最大日期值

django python 日期时间设置为午夜