python 如何运行一个函数来按月比较两个日期?

pgx2nnw8  于 2023-01-19  发布在  Python
关注(0)|答案(2)|浏览(142)

我正在尝试运行一个函数来比较今天的月份和用户输入的月份。日期将由用户输入为'YYYY-MM-DD'。这是我目前所拥有的:

class Sneaker(models.Model):
name = models.CharField(max_length=100)
brand = models.CharField(max_length=100)
description = models.TextField(max_length=250)
date = models.DateField('release date')
price = models.IntegerField()

def worn_for_the_month(self):
    return self.worn_set.filter(date=date.today().month).count == date.month

但得到以下错误:
格式:参数必须为字符串
所以我试着用下面的函数代替string:

def worn_for_the_month(self):
    return self.worn_set.filter(date=str(date.month)) == str(date.month)

我得到了这个错误:
%(value)s”值的日期格式无效。它必须为YYYY-MM-DD格式。
我不确定我现在是否使用了正确的函数类型。我只想将我们所在的月份与用户输入的月份进行比较。

41zrol4v

41zrol4v1#

如果你真的只想过滤月份值,那么你可以这样做(__month):

def worn_for_the_month(self):
    return self.worn_set.filter(date__month=date.today().month).count()

但是,我想您并不真的想这样做,因为您将计算2022年7月、2021年7月、2020年7月等时间佩戴的手表......相反,您可以使用datetime库中的replace()timedelta

from datetime import datetime

""" replace the days to get the first of the month: """
today = datetime.now()
first_of_the_month = today.replace(day=1)
# output: datetime.datetime(2022, 7, 1, 19, 54, 45, 95533)

""" use timedelta to get 31 days ago: """
one_month_ago = today - timedelta(days=31)
# output: datetime.datetime(2022, 6, 18, 19, 56, 15, 39065)
mwg9r5ms

mwg9r5ms2#

首先,我认为你必须缩进类sleaker后面的所有项,才能把它们放到类里面。然后你忘了导入模型。'from django.db import models'就可以了。

相关问题