代码之家  ›  专栏  ›  技术社区  ›  Al Lelopath

如何在for循环(datetime)中跨出一周(7天)

  •  4
  • Al Lelopath  · 技术社区  · 6 年前

    for mydate in daterange (startDate, endDate):
    

    但每天都在增加。我希望这一步是一个星期。 一个黑客会跳过6天,但那是可怕的。 怎么做?

    def daterange(start_date, end_date):
        for n in range(int ((end_date - start_date).days)):
            yield start_date + timedelta(n)
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Patrick Artner    6 年前

    使用步骤为7的范围对象,并将其添加到开始日期:

    import datetime
    
    def daterange(startdate, enddate, steps=1): 
        """Yields dates in increments of steps days from startdate to enddate"""
        numdays = (enddate-startdate).days 
        for x in range (0, numdays, steps):
            yield startdate + datetime.timedelta(days = x)
    
    
    today = datetime.datetime.today() 
    end = today + datetime.timedelta(days=40)
    
    print( list(daterange(today, end, 7)))
    

    [datetime.datetime(2018, 9, 28, 19, 34, 26, 976681), 
     datetime.datetime(2018, 10, 5, 19, 34, 26, 976681), 
     datetime.datetime(2018, 10, 12, 19, 34, 26, 976681), 
     datetime.datetime(2018, 10, 19, 19, 34, 26, 976681), 
     datetime.datetime(2018, 10, 26, 19, 34, 26, 976681), 
     datetime.datetime(2018, 11, 2, 19, 34, 26, 976681)]
    
        2
  •  3
  •   Lev Zakharov Riss    6 年前

    只需在循环中添加步长:

    from datetime import timedelta, date
    
    def daterange(start_date, end_date):
         for n in range(0, int((end_date - start_date).days) + 1, 7):
             yield start_date + timedelta(n)
    
    start_dt = date(2018, 9, 1)
    end_dt = date(2018, 10, 30)
    for dt in daterange(start_dt, end_dt):
        print(dt.strftime("%Y-%m-%d"))
    

    输出:

    2018-09-01
    2018-09-08
    2018-09-15
    2018-09-22
    2018-09-29
    2018-10-06
    2018-10-13
    2018-10-20
    2018-10-27