Calcul d'une date à partir du numéro de la semaine
Par Auteur INTERNE, mardi 24 octobre 2000 à 19:38 :: Trucs et Astuces PHP :: #359 :: rss
Calcul d'une date à partir du numéro de la semaine.
Après une question sur le forum PHPIndex, j'ai trouvé intéressant d'en faire un truc et astuce.
Il faut tout d'abord partir d'une date, exemple le 1 janvier de l'année en court.
Donc pour la 14 eme semaine de l'année 2001, on part du 01 janvier 2001. Ensuite, on crée un mktime() en ajoutant au jour du 01 janvier le nombre de jours pour arriver au même jour de la semaine mais 14 semaines plus tard,
soit :
$mon_mktime = mktime (0,0,0,01,(01+(14*7)),2001);De plus, la semaine 1 commence le premier lundi du mois de janvier de l'année.
Donc si le premier janvier est un lundi on a :
$mon_mktime = mktime (0,0,0,01,(01+(13*7)),2001);Sinon on a :
$mon_mktime = mktime (0,0,0,01,(01+(14*7)),2001);On a donc un mktime d'un jour de la 14 ème semaine 2001. Pour avoir le lundi de cette semaine, on utilise la fonction date("w",$mon_mktime) ce qui nous donne le décalage par rapport au dimanche précédent. Il nous faut ce décalage en seconde :
$decalage = ((date("w",$mon_mktime)-1)*60*60*24);
Mais ce décalage n'est valable que si le jour de la semaine est supérieur au lundi Dimanche exclus.Le mktime du lundi est donc le suivant :
$lundi = $mon_mktime - $decalage;On en déduit le dimanche :
$dimanche = $lundi + (6*60*60*24);On peut donc afficher la date du lundi et du dimanche avec la fonction date().
print date("D - d/m/Y",$lundi);
print date("D - d/m/Y",$dimanche);
Le paramètre 'D' affiche le Jour de la semaine, pour vérifier si c'est bien un lundi.Il n'y a plus qu'a créer notre fonction :
<?
function get_lundi_dimanche_from_week($week,$year)
{
if(strftime("%W",mktime(0,0,0,01,01,$year))==1)
$mon_mktime = mktime(0,0,0,01,(01+(($week-1)*7)),$year);
else
$mon_mktime = mktime(0,0,0,01,(01+(($week)*7)),$year);
if(date("w",$mon_mktime)>1)
$decalage = ((date("w",$mon_mktime)-1)*60*60*24);
$lundi = $mon_mktime - $decalage;
$dimanche = $lundi + (6*60*60*24);
return array(date("D - d/m/Y",$lundi),date("D - d/m/Y",$dimanche));
}
$tmp = get_lundi_dimanche_from_week($week,$year);
print $tmp[0]."<BR>"; // date du lundi
print $tmp[1]."<BR>"; // date du mardi
?>
Voici résultat pour la semaine 14 de l'année 2001 :
Mon - 02/04/2001 Sun - 08/04/2001Dans la fonction on pourrait tester la validité de la réponse avec cette ligne :
echo strftime("%W",$lundi)."<BR>";
Dans ce cas elle renvoit bien 14.Consulter le lien






Commentaires
#1 - Le vendredi 10 février 2006 à 14:40, par Morsca
#2 - Le mardi 14 mars 2006 à 15:13, par Nellio
#3 - Le mardi 27 juin 2006 à 14:06, par afc
#4 - Le vendredi 7 juillet 2006 à 10:16, par DocKeR
#5 - Le vendredi 7 juillet 2006 à 14:51, par DocKeR
#6 - Le samedi 11 novembre 2006 à 21:37, par maxx
#7 - Le mercredi 7 février 2007 à 15:58, par Oliv.
#8 - Le mardi 13 mars 2007 à 15:29, par Cursed
#9 - Le mercredi 18 avril 2007 à 09:12, par godzinho
#10 - Le dimanche 4 novembre 2007 à 22:38, par spamoi
#11 - Le mardi 5 février 2008 à 11:53, par Reda
#12 - Le samedi 28 mars 2009 à 17:17, par jeroen
#13 - Le mardi 9 juin 2009 à 15:01, par Piter&SilvR
#14 - Le vendredi 2 octobre 2009 à 21:13, par Eric
#15 - Le lundi 19 avril 2010 à 11:17, par MagicManu
#16 - Le samedi 28 août 2010 à 06:59, par JCD.web
#17 - Le samedi 28 août 2010 à 07:00, par JCD.web
#18 - Le mercredi 28 septembre 2011 à 16:39, par fredpmu
#19 - Le mardi 1 novembre 2011 à 12:14, par Karando
#20 - Le lundi 23 janvier 2012 à 10:51, par vertigo
#21 - Le vendredi 10 février 2012 à 10:54, par Thomas
Ajouter un commentaire
Vous pouvez soumettre un commentaire en remplissant le formulaire ci-dessous. Toutes les contributions font l'objet d'une étape de modération par notre équipe.
Le code HTML dans le commentaire sera affiché comme du texte, les adresses internet seront converties automatiquement.