倒计时4周(一星期一周)回到python / django [英] countdown 4 weeks (week by week) back with python/django

查看:125
本文介绍了倒计时4周(一星期一周)回到python / django的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有可能有人知道我可以在给定的年份4周后如何进行倒计时,后来计算每周的start_date和end_date?



这是我现在所在: / p>

  def FourWeeks(year,week):
d = date(year,1,1)
delta_days = d.isoweekday() - 1
fourweekback = [week-x for x in range(4)]
for delta_weeks in fourweekback:
delta = timedelta(days = -delta_days,weeks = delta_weeks )
weekbeg = datetime.datetime.combine(d,datetime.time(00,00,01))+ delta
delta2 = timedelta(days = 6-delta_days,weeks = delta_weeks)
weekend = datetime.datetime.combine(d,datetime.time(23,59,59))+ delta2
return(fourweekback,weekbeg,weekend)

从此输出:

  FourWeeks(2013,44)
([40,39,38,37],datetime.datetime(2013,10,7,0,0,1),datetime.datetime(2013,10,13,23,59,59))
([40,39,38,37],dateti me.datetime(2013,9,30,0,0,1),datetime.datetime(2013,10,6,23,59,59))
([40,39,38,37],datetime .datetime(2013,9,23,0,0,1),datetime.datetime(2013,9,29,23,59,59))
([40,39,38,37],datetime。 datetime(2013,9,16,0,0,1),datetime.datetime(2013,9,22,23,59,59))
([40,39,38,37],datetime.datetime (2013,9,16,0,0,1),datetime.datetime(2013,9,22,23,59,59))

这是我想要实现的:

  FourWeeks(2013,44)
(44,datetime.datetime(2013,10,28,0,0,1),datetime.datetime(2013,11,3,23,59,59))
(39,datetime.datetime (2013,9,23,0,0,1),datetime.datetime(2013,9,29,23,59,59))
(38,datetime.datetime(2013,9,16,0, 0,1),datetime.datetime(2013,9,22,23,59,59))
(37,datetime.datetime(2013,9,9,0,0,1),datetime.datetime 2013,9,15,23,59,59))

在下一步我喜欢make a曲与周贝,周末

  cursor.execute(SELECT * FROM event WHERE datetime BETWEEN%s AND%s,[weekbeg,周末])

任何想法我该怎么做?

解决方案

您应该能够适应以下内容(请注意它使用第三方 dateutil ,这可以通过pip轻松安装&安培; co):

  from dateutil.relativedelta importreativedelta 
from dateutil.rrule import rrule,WEEKLY,MO,SU
from datetime import datetime,timedelta

def four_weeks(year,week):
end = datetime(year,1,1)+ relativedelta(weeks = week-1,weekday = SU)
start = end - relativedelta(weeks = 4,weekday = MO)
mint,maxt = datetime.min.time(),datetime.max.time()
for dt rrule(WEEKLY,start,count = 4):
yield dt.combine(dt,mint),dt.combine(dt + timedelta(days = 6),maxt)

,结束于四周(2013,44):
print start,' - >',end

输出:

  2013-10-07 00:00:00  - > 2013-10-13 23:59:59.999999 
2013-10-14 00:00:00 - > 2013-10-20 23:59:59.999999
2013-10-21 00:00:00 - > 2013-10-27 23:59:59.999999
2013-10-28 00:00:00 - > 2013-11-03 23:59:59.999999


Could someone know how I can do countdown 4 weeks back with given year and later count start_date and end_date of each week?

This is what I have now:

def FourWeeks(year, week):
    d = date(year, 1, 1)
    delta_days = d.isoweekday() - 1
    fourweekback = [week - x for x in range(4)]
    for delta_weeks in fourweekback:
        delta = timedelta(days=-delta_days, weeks=delta_weeks)
        weekbeg = datetime.datetime.combine(d, datetime.time(00, 00, 01)) + delta
        delta2 = timedelta(days=6-delta_days, weeks=delta_weeks)
        weekend = datetime.datetime.combine(d, datetime.time(23, 59, 59)) + delta2
    return (fourweekback, weekbeg, weekend)

output from this:

FourWeeks(2013, 44)
    ([40, 39, 38, 37], datetime.datetime(2013, 10, 7, 0, 0, 1), datetime.datetime(2013, 10, 13, 23, 59, 59))
    ([40, 39, 38, 37], datetime.datetime(2013, 9, 30, 0, 0, 1), datetime.datetime(2013, 10, 6, 23, 59, 59))
    ([40, 39, 38, 37], datetime.datetime(2013, 9, 23, 0, 0, 1), datetime.datetime(2013, 9, 29, 23, 59, 59))
    ([40, 39, 38, 37], datetime.datetime(2013, 9, 16, 0, 0, 1), datetime.datetime(2013, 9, 22, 23, 59, 59))
    ([40, 39, 38, 37], datetime.datetime(2013, 9, 16, 0, 0, 1), datetime.datetime(2013, 9, 22, 23, 59, 59))

and this is what I wanted to achieve:

FourWeeks(2013, 44)
    (44, datetime.datetime(2013, 10, 28, 0, 0, 1), datetime.datetime(2013, 11, 3, 23, 59, 59))
    (39, datetime.datetime(2013, 9, 23, 0, 0, 1), datetime.datetime(2013, 9, 29, 23, 59, 59))
    (38, datetime.datetime(2013, 9, 16, 0, 0, 1), datetime.datetime(2013, 9, 22, 23, 59, 59))
    (37, datetime.datetime(2013, 9, 9, 0, 0, 1), datetime.datetime(2013, 9, 15, 23, 59, 59))

In the next step I like make a query with weekbeg, weekend

cursor.execute("SELECT * FROM event WHERE datetime BETWEEN %s AND %s, [weekbeg, weekend] )

Any idea how I can do this?

解决方案

You should be able to adapt the following (note it uses the 3rd party dateutil which is easily installable via pip & co):

from dateutil.relativedelta import relativedelta
from dateutil.rrule import rrule, WEEKLY, MO, SU
from datetime import datetime, timedelta

def four_weeks(year, week):
    end = datetime(year, 1, 1) + relativedelta(weeks=week-1, weekday=SU)
    start = end - relativedelta(weeks=4, weekday=MO)
    mint, maxt = datetime.min.time(), datetime.max.time()
    for dt in rrule(WEEKLY, start, count=4):
        yield dt.combine(dt, mint), dt.combine(dt + timedelta(days=6), maxt)

for start, end in four_weeks(2013, 44):
    print start, '->', end

Output:

2013-10-07 00:00:00 -> 2013-10-13 23:59:59.999999
2013-10-14 00:00:00 -> 2013-10-20 23:59:59.999999
2013-10-21 00:00:00 -> 2013-10-27 23:59:59.999999
2013-10-28 00:00:00 -> 2013-11-03 23:59:59.999999

这篇关于倒计时4周(一星期一周)回到python / django的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆