2016-06-28 284 views
0

我已經使用datetime.datetime.now()在我的模型中存儲datefield,保存爲2016-06-27 15:21:17.248951+05:30。現在我想比較datefield與從前端獲得的datetime價值,如Thu May 26 2016 00:00:00 GMT 0530 (IST)。 Django如何查詢模型以比較兩個日期字段?如何比較Django中的兩個日期時間字段

# models.py 

datefield = models.DateTimeField(blank=True,null=True) 

我試圖轉換datefield使用split()和Python的remove()功能的格式將其創建爲2016-06-27 13:25:35從前端獲得。

但仍然沒有解決辦法,並得到Null即使我比較像這樣(2016-06-27 13:25:35)值這個(2016-06-27 12:36:34.898593 + 00)值相同的日期值,因爲兩個值的日期都是相同的。

我一直在使用簡單的Django查詢,如下檢查了它:

company_details.objects.filter(datefield=datefield).only('par1','par2',...) 
+0

您想與日期和時間進行比較嗎?或只有約會? –

+0

我只需要比較日期 –

+0

請注意'datetime.datetime.now()'是一個非時區感知時間,並且您從前端獲得的時間有一個時區。從概念上講,你無法比較它們。 – RemcoGerlich

回答

1

一旦你已經從前端轉換的日期到像2016-06-27 13:25:35一個ISO格式,你可以用它來與這些

Model.objects.filter(date_created__startswith=today) 
Model.objects.filter(date_created__contains=today) 

它工作得一個查詢模式,如果你只希望過濾某個日期,如2016-06-27

Model.objects.filter(date_created__startswith=date(2016, 6, 27)) 

要分析你是從前端獲取日期字符串,有兩種選擇。

如果您的日期字符串格式良好,您可以簡單地使用例如datestring.strftime('%Y-%m-%d %H:%M:%S')解析它以獲得datetime()對象。

如果您的日期字符串爲不可靠並且可能採用不能預測的不同方式進行格式化,我建議您使用DateUtil。它附帶了一個解析器,它將嘗試將任何字符串轉換爲日期時間,例如

>>> from dateutil.parser import parse 
>>> parse("Today is January 1, 2047 at 8:21:00AM", fuzzy_with_tokens=True) 
(datetime.datetime(2011, 1, 1, 8, 21), (u'Today is ', u' ', u'at ')) 
+0

嘿我的日期字段不在%Y-%m-%d%H:%M:%S這種格式,所以我無法使用strftime,也無法使用分析將其轉換爲所需的格式。但無論您提出的查詢是否正常工作,感謝您的幫助 –

1

比較像這樣的日期和時間。儘可能多地給這個變量0123'。

In [1]: from datetime import datetime 
In [2]: past = datetime.now() 
In [3]: present = datetime.now() 
In [4]: present.strftime('%Y-%m-%d %H:%M:%S') == past.strftime('%Y-%m-%d %H:%M:%S') 
Out[17]: False 
In [5]: present.strftime('%Y-%m-%d %H:%M') == past.strftime('%Y-%m-%d %H:%M') 
Out[2]: True 

如果你想只比較date使用這樣的。

if present.date() == past.date(): 
    #Do your stuff 
+0

我沒有相同格式的日期。我需要查詢,它將比較兩個日期字段,並根據過濾的日期時間字段篩選數據庫中的所有數據。 –

+0

然後轉換成像'datetime'這樣的單一格式,然後與它們進行比較。你如何比較不同格式的數據? –

+0

顯然我不能,你能告訴我如何在這個(2016-06-27 12:36:34.898593 + 00)格式中轉換這個(2016年5月26日星期四00:00:00 GMT 0530(IST))嗎? –