获取范围内的所有月份和年份



我正在编写一个django应用程序,其中存储了基于日期时间字段的记录。

first_record = MyModel.objects.filter().order_by('-added').first()
first_record = (first_record.added.month, first_record.added.year)
last_record = MyModel.objects.filter().order_by('-added').first()
last_record = (last_record.added.month, last_record.added.year)

现在我想列出第一张唱片和最后一张唱片之间的所有月份/年份。一个粗略的想法是:

for i in range(first_record, last_record):
# do something

范围函数应该给我一个要迭代的列表,如下所示:

[('01','2018'),('02','2018'),('03','2018'),....,('11','2020'),('12','2020')]

你知道我该怎么做吗?

(last_record.added.month, last_record.added.year)也是获取包含月份和年份的元组的正确方法。请注意,我希望月份的格式为01,而不是第一个月的1

我相信Django有一个内置的函数。你可以做:

>>> Entry.objects.dates('pub_date', 'month')
[datetime.date(2005, 2, 1), datetime.date(2005, 3, 1)]
>>> Entry.objects.dates('pub_date', 'week')
[datetime.date(2005, 2, 14), datetime.date(2005, 3, 14)]

翻译成你的代码,会有点像

MyModel.objects.dates('added', 'month')

文档

您可以使用dateutil.rerelativelta这是代码

from dateutil.relativedelta import relativedelta
import datetime
result = []
today = datetime.date.today()
current = datetime.date(2010, 8, 1)    
while current <= today:
result.append(current)
current += relativedelta(months=1)

了解更多abouhttps://dateutil.readthedocs.io/en/latest/relativedelta.html

最新更新