95 votes

Trouver la date du premier lundi après une date donnée

Étant donné une date particulière, disons 02-07-2011, comment puis-je trouver la date du lundi suivant (ou n'importe quel jour de la semaine d'ailleurs) après cette date ?

163voto

phihag Points 89765
import datetime
def next_weekday(d, weekday):
    days_ahead = weekday - d.weekday()
    if days_ahead <= 0: # Target day already happened this week
        days_ahead += 7
    return d + datetime.timedelta(days_ahead)

d = datetime.date(2011, 7, 2)
next_monday = next_weekday(d, 0) # 0 = Monday, 1=Tuesday, 2=Wednesday...
print(next_monday)

73voto

user1034533 Points 678

Voici une alternative succincte et générique aux réponses un peu lourdes ci-dessus.

 # Returns the date of the next given weekday after
# the given date. For example, the date of next Monday.
# NB: if it IS the day we're looking for, this returns 0.
# consider then doing onDay(foo, day + 1).
onDay = lambda date, day: date + datetime.timedelta(days=(day-date.weekday()+7)%7)

29voto

Dirk Points 17809

Essayer

 >>> dt = datetime(2011, 7, 2)
>>> dt + timedelta(days=(7 - dt.weekday()))
datetime.datetime(2011, 7, 4, 0, 0)

en utilisant, que le lundi suivant est 7 jours après le lundi un, 6 jours après un mardi, et ainsi de suite, et aussi en utilisant, que le type datetime Python rapporte le lundi comme 0 , . .., dimanche en 6 .

9voto

frenzykryger Points 689

Ceci est un exemple de calculs dans l'anneau mod 7 .

 import datetime


def next_day(given_date, weekday):
    day_shift = (weekday - given_date.weekday()) % 7
    return given_date + datetime.timedelta(days=day_shift)

now = datetime.date(2018, 4, 15) # sunday
names = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday',    
         'saturday', 'sunday']
for weekday in range(7):
    print(names[weekday], next_day(now, weekday))

imprimera :

 monday 2018-04-16
tuesday 2018-04-17
wednesday 2018-04-18
thursday 2018-04-19
friday 2018-04-20
saturday 2018-04-21
sunday 2018-04-15

Comme vous le voyez, c'est correctement vous donner lundi prochain, mardi, mercredi, jeudi vendredi et samedi. Et il a également compris que 2018-04-15 est un dimanche et a renvoyé le dimanche actuel au lieu du prochain.

Je suis sûr que vous trouverez cette réponse extrêmement utile après 7 ans ;-)

5voto

utdemir Points 9107

Vous pouvez commencer à ajouter un objet day to date et arrêter quand c'est lundi.

 >>> d = datetime.date(2011, 7, 2)
>>> while d.weekday() != 0: #0 for monday
...     d += datetime.timedelta(days=1)
... 
>>> d
datetime.date(2011, 7, 4)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X