2017-06-01 81 views
-2

我正在閱讀用戶的日期值,並需要在django中進行日期比較。我找不到任何答案如何做到這一點。我確實需要的是將字符串轉換爲日期,以便可以比較相等/小於/大於值。如何將日期值轉換爲日期類型以進行比較?

我得到如下的表格值。

start_date = form_new_task.cleaned_data['start_date'] 

我需要date.today()平等/小於/大於比較起始日期值。

任何人都可以讓我知道確切的方法來做到這一點。由於我將表單輸入設置爲date字段(不是datetime),所以我不讀取輸入的任何時間部分。

更新到全碼:

在窗體聲明:

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. 
+1

你的問題不明確。如果'start_date'是一個'DateField',那麼'cleaned_data ['start_date']'應該已經是一個日期實例。 – Alasdair

+0

使用'.date()'方法,這將幫助你看到[比較日期](https://stackoverflow.com/questions/3278999/how-can-i-compare-a-date-and-a-datetime -in-python) –

+0

我在調用date()方法時遇到以下錯誤 'if start_date.date()

回答

0

我想出了這樣做的方法,並認爲這會對其他人有所幫助。我已經將start_date字段聲明爲DateField,並且當我讀取它作爲日期類型對象獲得的值(實際上我認爲是datetime)。所以我只需要在這兩天內得到一個增量(差異)。

表:

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

POST請求處理方法:

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: 
     .... 
     .... 
+0

如果你有'DateField',那麼'cleaned_data ['start_date']'將是'date',而不是'datetime'。如果你願意,你可以創建一個增量,但你不必這樣做。只要'如果start_date Alasdair

+0

謝謝@Alasdair。我試過這種方式,它不會工作。但讓三角洲爲我工作。 –

-1

你可以比較像這樣的日期,

from datetime import datetime 

if start_date < datetime.today().date(): 
    err_str = 'Start date cannot be a past date.' 
+0

我無法將'start_date'傳遞給'strptime'。它說'strptime()參數1必須是str,而不是datetime.date'這意味着它已經是一個日期對象。他們爲什麼不能將它與'date.today()'進行比較。我需要正確的功能或代碼來比較這些。另外我不能調用'datetime.datetime.today()。date()'。它給出了同樣的錯誤。 –

+0

如果它是一個日期對象,那麼爲什麼你不能將它與date.toda()進行比較?它應該工作.. – zaidfazil

+0

請參考我發佈的答案。我認爲這很清楚,因爲我可以根據返回的值比較各種情況。 –

相關問題