我已使用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应该如何查询模型以比较两个日期字段?
# models.py
datefield = models.DateTimeField(blank=True,null=True)
我尝试使用Python的datefield
和split()
函数转换来自前端的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 :(得分:2)
比较这样的日期和时间。只要像你想要的那样给'%Y-%m-%d %H:%M:%S'
这个变量。
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
答案 1 :(得分: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 '))