首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存旧日期,并在Django显示时间,直到该日期的下一周年纪念日。

保存旧日期,并在Django显示时间,直到该日期的下一周年纪念日。
EN

Stack Overflow用户
提问于 2013-10-18 01:16:39
回答 2查看 759关注 0票数 0

我正在编写一个基本的提醒应用程序,用户可以输入重要的日期(生日、纪念日等)。看看还有多少时间才能庆祝下一个周年纪念日。例如,用户可以像1990年1月1日那样过生日,我想为他们显示下一个生日的时间(2个月14天)。

我一直在使用django时间,直到使用了内置的模板标记,但它只适用于将来的日期(如果日期在当前日期之前,则不会显示任何内容)。我不知道如何将输入的日期“正常化”,使之成为未来的时间。

当前代码:

代码语言:javascript
复制
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)     

模板

代码语言:javascript
复制
<td class="column-right"><h4>{{event.date|timeuntil}}</h4></td>

(它还在datetime.now()模块上引发错误,没有属性"now",这是查找当前日期的旧方法吗?)

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-18 01:26:58

nowdatetime.datetime类的方法,而不是datetime模块:

代码语言:javascript
复制
difference = datetime.datetime.now() - event_date

尽管如此,你的修正逻辑已经失效了。如果您将计算写成一行,那么应该清楚为什么:

代码语言:javascript
复制
difference = datetime.now() - event_date
event_date_new = event_date + difference

因此,通过替代:

代码语言:javascript
复制
event_date_new = event_date + (datetime.now() - event_date)

它简化为:

代码语言:javascript
复制
event_date_new = datetime.now()

我会这样试一试:

代码语言:javascript
复制
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来计算出下一个闰年,如果您想要显示真正的时间间隔。

票数 0
EN

Stack Overflow用户

发布于 2013-10-18 01:27:54

datetime是一个标准的Python模块,在这个模块下有一个同名的对象。nowdatetime对象的类方法。因此,如果您想使用datetime.now(),您应该使用from datetime import datetime或调用datetime.datetime.now()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19440005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档