【发布时间】:2016-03-12 10:25:10
【问题描述】:
我编写了一个 while 循环来过滤订单数据库,以便仅将用户选择的两个日期之间的订单附加到 orderDates 数组和要在地图上绘制的订单数组。我已使用以下代码将用户选择的日期(通过 HTML 表单提交)转换为 python 日期时间对象:
filters.append(datetime.datetime.strptime(str(request.forms.get('startDate')), "%Y-%m-%d"))
filters.append(datetime.datetime.strptime(str(request.forms.get('endDate')), "%Y-%m-%d"))
如您所见,这两个日期随后被添加到一个称为过滤器的数组中。当我检查每个订单时,我的问题就出现了,出于某种原因,即使我选择了一个应该返回多个订单的日期范围,所有订单都被过滤掉了。这是我写的while循环:
while(x < len(orders)):
# Checks that postcode is valid
if(re.search('^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPS-UW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$',orders[x][15].strip())):
# Converts the order date into a time object
orderDate = datetime.datetime.strptime(orders[x][2], "%d/%m/%y")
print(orderDate)
# Compares the order date with the start date and end date of the timeframe to ensure it lies between them
if(orderDate > filters[0]) and (orderDate < filters[1]):
# If the order was made during the timeframe requested and it fits the order category requested then it is added to mapOrders
if(filters[4] == "All"):
mapOrders.append(orders[x])
orderDates.append(orderDate)
print("Order added")
elif(orders[x][21].strip() == filters[4]):
mapOrders.append(orders[x])
orderDates.append(orderDate)
print("Order added")
else:
print("Order filtered out")
else:
print("Order filtered out")
print(filters[0])
print(filters[1])
else:
print(orders[x][15])
print("Order filtered out,regex.")
x = x + 1
以下是程序通过此 while 循环运行时产生的一些控制台输出,用户选择的两个日期分别是 2015 年 5 月 1 日作为开始日期和 2015 年 7 月 1 日作为结束日期:
2015-05-14 00:00:00
Order filtered out
2015-05-14 00:00:00
Order filtered out
2015-05-16 00:00:00
Order filtered out
2015-05-16 00:00:00
Order filtered out
2015-05-16 00:00:00
Order filtered out
2015-05-12 00:00:00
Order filtered out
2015-05-12 00:00:00
Order filtered out
2015-05-07 00:00:00
Order filtered out
2015-05-07 00:00:00
Order filtered out
2015-05-07 00:00:00
Order filtered out
2015-05-08 00:00:00
Order filtered out
2015-05-09 00:00:00
Order filtered out
2015-05-04 00:00:00
Order filtered out
2015-05-04 00:00:00
Order filtered out
2015-05-05 00:00:00
Order filtered out
2015-05-05 00:00:00
Order filtered out
2015-05-05 00:00:00
Order filtered out
2015-05-01 00:00:00
Order filtered out
2015-05-01 00:00:00
2015-07-01 00:00:00
2015-05-01 00:00:00
Order filtered out
2015-05-01 00:00:00
2015-07-01 00:00:00
2015-05-01 00:00:00
Order filtered out
2015-05-01 00:00:00
2015-07-01 00:00:00
2015-05-03 00:00:00
Order filtered out
2015-05-01 00:00:00
Order filtered out
2015-05-01 00:00:00
2015-07-01 00:00:00
有什么想法吗?
【问题讨论】:
-
从你的输出中我可以告诉你
filters[0]实际上是2015-05-01 00:00:00(5 月 1 日),而不是 6 月 1 日 -
啊,是的,这就是我的意思,但它仍然无法解释出了什么问题。
标签: python datetime if-statement filter