我正在编写一个基本的提醒应用程序,用户可以输入重要的日期(生日、纪念日等)。看看还有多少时间才能庆祝下一个周年纪念日。例如,用户可以像1990年1月1日那样过生日,我想为他们显示下一个生日的时间(2个月14天)。
我一直在使用django时间,直到使用了内置的模板标记,但它只适用于将来的日期(如果日期在当前日期之前,则不会显示任何内容)。我不知道如何将输入的日期“正常化”,使之成为未来的时间。
当前代码:
def events(request):
relationships = Relationship.objects.filter(user=request.user)
events = Event.objects.filter(user=request.user).order_by('date')[:8]
event_date = events[0].date
if datetime.now() >= event_date:
difference = datetime.now() - event_date
event_date_new = event_date + difference
event_date = event_date_new
context = {
'relationships': relationships,
'events': events
}
return render(request, 'app/events.html', context) 模板
<td class="column-right"><h4>{{event.date|timeuntil}}</h4></td>(它还在datetime.now()模块上引发错误,没有属性"now",这是查找当前日期的旧方法吗?)
提前感谢!
发布于 2013-10-18 01:26:58
now是datetime.datetime类的方法,而不是datetime模块:
difference = datetime.datetime.now() - event_date尽管如此,你的修正逻辑已经失效了。如果您将计算写成一行,那么应该清楚为什么:
difference = datetime.now() - event_date
event_date_new = event_date + difference因此,通过替代:
event_date_new = event_date + (datetime.now() - event_date)它简化为:
event_date_new = datetime.now()我会这样试一试:
now = datetime.datetime.now()
event_date = event_date.replace(year=now.year)
if event_date < now:
event_date.replace(year=now.year + 1)正如克里斯蒂安·特努斯指出的那样,如果event_date是一个闰日,那是行不通的。您可以不允许闰日作为event_date值,要求用户输入2月28日或3月1日。或者,您可以捕获replace引发的replace异常,并进行修正,添加或减去一天的timedelta。或者使用calendar.isleap来计算出下一个闰年,如果您想要显示真正的时间间隔。
发布于 2013-10-18 01:27:54
datetime是一个标准的Python模块,在这个模块下有一个同名的对象。now是datetime对象的类方法。因此,如果您想使用datetime.now(),您应该使用from datetime import datetime或调用datetime.datetime.now()
https://stackoverflow.com/questions/19440005
复制相似问题