Modèle:YEAR AND WEEK
[purger]
Donne l'année et la semaine du jour spécifié (suivant le format ISO 8601)
- Idée de l'algo
premier_lundi = (jour dans l'année - ordinal dans la semaine) mod 7 SI {{WEEK}} = 1 ET jour dans l'année > 7+premier_lundi "annee+1/1" SINON SI WEEK != 1 ET jour dans l'année < premier_lundi "annee-1/WEEK" SINON "annee/{{WEEK}}"
- Démonstration en python
#!/usr/bin/python
# -*- coding: utf-8 -*-
import datetime, locale, sys
locale.setlocale(locale.LC_ALL, '')
def date_mag(annee, mois, jour, decalage=0):
date = datetime.date(annee, mois, jour) + datetime.timedelta(weeks=decalage)
jour_dans_lannee = date.timetuple().tm_yday
prem_lundi = (jour_dans_lannee-date.weekday())%7
#Attention, le comportement du modulo est différent entre python [0,6] et mediawiki [-6,6]
week = date.isocalendar()[1]
#sys.stdout.write("%i-%i "%(prem_lundi, date.weekday()))
if week == 1 and jour_dans_lannee > 7+prem_lundi :
# Semaine pour l'année suivante
print "A %s : %i/%i" % (date.strftime("%A %d %m %Y"), date.year+1, 1)
elif week != 1 and jour_dans_lannee < prem_lundi :
# Semaine de l'année précédente
print "B %s : %i/%i" % (date.strftime("%A %d %m %Y"), date.year-1, week)
else:
print "C %s : %i/%i" % (date.strftime("%A %d %m %Y"), date.year, week)
for annee in 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013:
d = datetime.date(annee-1, 12, 27)
fin1 = datetime.date(annee, 1, 9)
print "- SEMAINE CHEVAUCHANTE %s --------------" % fin1.strftime("%Y")
while d < fin1:
date_mag(d.year, d.month, d.day)
d = d + datetime.timedelta(days=1)
print ""
"""
fin2 = datetime.date(annee, 12, 31)
print "= ANNEE =========="
while d < fin2:
date_mag(d.year, d.month, d.day)
d = d + datetime.timedelta(weeks=1)
"""
- Paramètres
-
- jour, mois, année (valeurs numériques)
- Exemple de valeur de retour
- « 2010/24 » pour
{{YEAR AND WEEK|jour=14|mois=6|année=2010}}
.
La documentation de ce modèle est générée par le modèle {{Documentation}}.
Elle est directement incluse dans l'appel de ce dernier. Si cette page est protégée, veuillez transférer le contenu de la documentation vers sa sous-page dédiée.
Les éditeurs peuvent travailler dans le bac à sable (créer) et la page de test (créer).
Voir les statistiques d'utilisation du modèle sur l'outil wstat.