Calculer une date en fonction d'un numéro de semaine

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Calculer une date en fonction d'un numéro de semaine

par liba » 12 oct. 2007, 13:01

En effet, j'avais testé ce cas spécial qu'est décembre 2007.

J'ai corrigé et c'est beaucoup mieux en effet :D

Merci pour tout

Lionel

par d0m » 12 oct. 2007, 09:34

Attention! Ton script n'est pas tout à fait correct.
Il marche en 2007 par chance car le premier janvier était un lundi!
Mais essaie avec 2008 tu verras que ca ne fonctionne plus...
une fois que tu as déterminé le premier jour de l'année il faut trouver le lundi de la première semaine c'est à dire le premier lundi qui suit le 1er janvier.
Ensuite seulement tu ajoutes aux jours 7 fois le nombre de semaines.

De plus au passage, comme écrit dans le manuel PHP, pour ajouter des jours il est préférable de ne pas utiliser ta méthode en passant par des secondes, mais avec la fonction date :
$n_Date_Lundi = mktime(0,0,0,1,$premier_lundi+(7*($n_Week_Number - 1)),$annee);
C'est pour la gestion des +/- 1h d'été/hiver.

par liba » 12 oct. 2007, 09:13

Voila ma solution sur base des données ci-dessus
$annee = 2007;
$premier = mktime(0,0,0,1,1,$annee);
$jour_de_la_semaine = date('w',$premier);
$n_Delta_Week = (7 * ($n_Week_Number - 1)); // $n_Week_Number reçu en paramètre de fonction
$n_Date_Lundi = $premier;
$n_Date_Lundi += ($n_Delta_Week * 60 *60 * 24);
echo "Date Lundi = ".date('d/m/Y', $n_Date_Lundi);
Ce qui pour Octobre 2007, soit les semaines 40, 41, 42, 43, 44 j'obtient ceci:
  • 40 = 01/10/2007
    41 = 08/10/2007
    42 = 15/10/2007
    43 = 22/10/2007
    44 = 29/10/2007
Un tout grand merci à d0m

Lionel :D

par d0m » 12 oct. 2007, 08:44

salut,
Si la première semaine de l’année est incomplète (c’est le cas six fois sur sept ; quand le premier janvier n’est pas un lundi), elle est numérotée 1 dès lors qu’elle a au moins quatre jours, 0 sinon.

Ainsi, le premier lundi de l’année appartient à la semaine 2 lorsque l’année commence un mardi, un mercredi, ou un jeudi ; il appartient à la semaine 1 lorsque le premier janvier est un vendredi, un samedi, un dimanche... ou un lundi
la première chose à faire est donc de tester quel jour est le premier :
$anne = 2007;
$premier = mktime(0,0,0,1,1,$annee);
$jour_de_la_semaine = date('w',$premier);
ensuite il faut se positionner sur le lundi de la première semaine d'après les cas cités plus haut,
et enfin ajouter (7*nombre de semaine) jours à ton lundi de la première semaine.
Et voilou, tu l'as ton jour magique :)

Calculer une date en fonction d'un numéro de semaine

par liba » 11 oct. 2007, 22:08

Bonjour,

Je désire calculer une date (ou timestamp) en PHP 5.

Pour corser le tout, je veux connaitre la date du lundi pour un numéro de semaine donné.

Je connais l'année, le mois et le numéro de semaine.

Un calcul avec strtime() n'est pas top, les fonctions "date_...." objets dans PHP5 sont vraiment faibles.

Quelqu'un aurait-il une idée, un bout de script, une petite fonction ou pourquoi pas une "classe maison".

Merci d'avance pour votre aide.

Lionel