Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何将日期值转换为日期类型进行比较?_Django_Django Forms - Fatal编程技术网

Django 如何将日期值转换为日期类型进行比较?

Django 如何将日期值转换为日期类型进行比较?,django,django-forms,Django,Django Forms,我正在从用户那里读取一个日期值,需要在django中对其进行日期比较。我找不到任何答案如何做到这一点。我真正需要的是将字符串转换为date,这样就可以比较它的相等/小于/大于值 我得到如下形式值 start_date = form_new_task.cleaned_data['start_date'] 我需要将开始日期值与date.today()进行比较,以确定相等/小于/大于 有人能告诉我做这件事的确切方法吗。我没有从输入中读取任何时间部分,因为我将表单输入设置为date字段(而不是date

我正在从用户那里读取一个日期值,需要在django中对其进行日期比较。我找不到任何答案如何做到这一点。我真正需要的是将字符串转换为date,这样就可以比较它的相等/小于/大于值

我得到如下形式值

start_date = form_new_task.cleaned_data['start_date']
我需要将开始日期值与
date.today()
进行比较,以确定相等/小于/大于

有人能告诉我做这件事的确切方法吗。我没有从输入中读取任何时间部分,因为我将表单输入设置为
date
字段(而不是
datetime

更新为完整代码:

class Form_Task(forms.Form):
    start_date = forms.DateField() # declaration
    form_new_task = Form_Task(request.POST)

    if form_new_task.is_valid():
      start_date = form_new_task.cleaned_data['start_date']
      delta = start_date - date.today()

      if delta.days < 0:
        err_str = 'Start date cannot be a past date.'
      elif delta.days == 0:
        ....
        ....
在声明中:

class Form_Task(forms.Form):
    start_date = forms.DateField(label='Check-In Date', initial='2017-05-05',
                                   widget=forms.DateInput(attrs={'class': 'form-control,'size': 10}))
在POST请求中:

form_new_task = Form_Task(request.POST)
    if form_new_task.is_valid():
        start_date = form_new_task.cleaned_data['start_date']

        if start_date < date.today()
            err_str = 'Start date cannot be a past date.' # here I don't get this assigned. It's evaluate to False.
form\u new\u task=form\u task(request.POST)
如果表单\u新建\u任务。是否有效()
开始日期=表单新任务。已清理的数据['开始日期']
如果开始日期<日期今天()
err_str='开始日期不能是过去的日期。#这里我没有指定此日期。这是错误的。

您可以像这样比较日期

from datetime import datetime

if start_date < datetime.today().date():
    err_str = 'Start date cannot be a past date.'
从日期时间导入日期时间
如果开始日期
我找到了这样做的方法,并认为这会对其他人有所帮助。我已经将start_date字段声明为DateField,当我读取该值时,它将作为一个日期类型对象(我认为是datetime)。所以我必须在这两天内得到一个差值

表格:

class Form_Task(forms.Form):
    start_date = forms.DateField() # declaration
    form_new_task = Form_Task(request.POST)

    if form_new_task.is_valid():
      start_date = form_new_task.cleaned_data['start_date']
      delta = start_date - date.today()

      if delta.days < 0:
        err_str = 'Start date cannot be a past date.'
      elif delta.days == 0:
        ....
        ....
在post请求处理程序方法中:

class Form_Task(forms.Form):
    start_date = forms.DateField() # declaration
    form_new_task = Form_Task(request.POST)

    if form_new_task.is_valid():
      start_date = form_new_task.cleaned_data['start_date']
      delta = start_date - date.today()

      if delta.days < 0:
        err_str = 'Start date cannot be a past date.'
      elif delta.days == 0:
        ....
        ....
form\u new\u task=form\u task(request.POST)
如果表单\u新建\u任务。是否有效()
开始日期=表单新任务。已清理的数据['开始日期']
delta=开始日期-日期。今天()
如果delta.days<0:
err_str='开始日期不能是过去的日期。'
elif delta.days==0:
....
....

你的问题不清楚。如果
start\u date
是一个
DateField
,那么
cleaned\u data['start\u date']
应该已经是一个日期实例。使用
.date()
方法这将帮助您查看,因为它已经是一个日期。您实际上不需要转换任何内容。此外,此比较应作为表单验证的一部分进行。您应该在表单类上的
clean\u start\u date
方法中执行此操作。您所说的“我不能简单地比较它们”是什么意思?我不能将
start\u date
传递给
strtime
。它说strptime()参数1必须是str,而不是datetime.date,这意味着它已经是一个日期对象了。他们解释了为什么我不能将它与
date.today()
进行比较。我需要正确的函数或代码来比较这些。我也不能调用
datetime.datetime.today().date()
。它给出了相同的错误。如果它是一个日期对象,那么为什么不能将它与date.toda()进行比较??这应该行得通。请参考我贴出的答案。我认为这非常清楚,因为我可以根据返回的值比较各种情况。如果您有
日期字段
,则
清理的数据['start\u date']
将是
日期
,而不是
日期时间
。如果需要,可以创建增量,但不必这样做。只要
如果开始日期
就可以了。最后,正如Daniel所建议的,最好在表单中添加一个
clean\u start\u date
方法,并在那里进行检查(有关更多信息,请参阅)。谢谢@Alasdair。我试过那种方法,但不起作用。但是三角洲对我来说很有效。