2017-02-04 25 views
1

我們需要找到周(日期時間)開始的更簡單的方法,因爲這兩個變量:找到本週開始的任何啓動

  1. now - 當前日期時間
  2. START_DAY - 周(0-6,其中0是星期一和6是星期天)的一天,我們考慮

我們可以使用循環「一週的開始」,但是這似乎是太多的步驟一個簡單的問題:

week_start = datetime(now.year, now.month, now.day) 
while week_start.weekday() != START_DAY: 
    week_start = week_start - timedelta(days=1) 

這真的很容易,如果START_DAY總是0(星期一):

week_start = datetime(now.year, now.month, now.day) - timedelta(days=now.weekday()) 

或總是6(星期日):

week_start = datetime(now.year, now.month, now.day) - timedelta(days=(0 if now.weekday() == START_DAY else now.weekday() + 1)) 

什麼是計算本週開始的簡單方法任何值爲START_DAY

回答

3

START_DAYnow之間的天數爲now.weekday() - START_DAY。但是,如果今天是在START_DAY之前(例如,如果今天是星期三,而START_DATE是6 =星期日),那麼該數字將是負數,並且從今天減去它會給你日期。

因爲你很可能不希望出現這種情況,就需要區別模7:

week_start = now.date() - timedelta(days=(now.weekday() - START_DAY) % 7) 

例子:

>>> from datetime import datetime, timedelta 
>>> now = datetime(2017, 2, 1) 
>>> print(now.strftime("%d/%m/%y (%a)")) 
01/02/17 (Wed) 
>>> for START_DAY in range(7): 
...  start_week = now.date() - timedelta(days=(now.weekday() - START_DAY) % 7) 
...  print(start_week.strftime("%d/%m/%y (%a)")) 
... 
30/01/17 (Mon) 
31/01/17 (Tue) 
01/02/17 (Wed) 
26/01/17 (Thu) 
27/01/17 (Fri) 
28/01/17 (Sat) 
29/01/17 (Sun) 
相關問題