我有用户在注册后获得6个月的特别优惠。我保存了注册的日期时间,并知道此日期时间+ 6个月是特别优惠。
现在我需要在5个月后显示一个按钮,提醒他们该优惠在1个月内用完。
所以我需要检查datetime.now()是否在范围内:
user1 = datetime(2017,4,30)
user2 = datetime(2017,5,25)
user3 = datetime(2017,1,11)
user4 = datetime(2017,2,20)
user5 = datetime(2017,12,23)
user6 = datetime(2017,7,22)
list_of_users = [user1,user2,user3,user4,user5,user6]
for user_date in list_of_users:
if datetime.now() < user_date + relativedelta(months=6) and datetime.now() > user_date + relativedelta(months=5):
print user_date, "yes"
我已经创建了一些示例,user5应该在此范围内,但不知何故它不会识别它。
答案 0 :(得分:2)
你的代码工作得很好,虽然有点冗长。 user5
不符合您的标准,数据将来会超过5个月,而不是过去。他们的特价期间尚未开始,更不用说距离到期还有1个月。他们应该只看到 2018年5月23日到6月之间的警告。
您可以通过首先存储截止日期并使用链式比较来更简洁地进行测试:
now = datetime.now()
started_min, started_max = now - relativedelta(months=6), now - relativedelta(months=5)
for user_date in list_of_users:
if started_min <= user_date <= started_max:
print user_date, "yes"
因此,如果用户在5到6个月之前开始提供优惠,那么现在需要提醒他们,因为他们已经上个月了。