[resolu] Transformer numero de jour et semaine en date

Transformer numero de jour et semaine en date [resolu] - PHP - Programmation

Marsh Posté le 15-09-2010 à 13:07:22    

Bonjour,
 
J'ai dans ma base de donnees un numero de jour (1=lundi, 2=mardi, ...), un numero de semaine et l'annee. Chaque donnee est dans une colonne differente. Je souhaiterai transformer ces donnees en une date "YYYY-MM-DD".
J'ai essaye quelques trucs mais rien de bien convaincant.
 
Auriez vous une solution ?


Message édité par shooker le 15-09-2010 à 14:48:45
Reply

Marsh Posté le 15-09-2010 à 13:07:22   

Reply

Marsh Posté le 15-09-2010 à 14:32:47    

Bonjour,
 
Un truc comme ça ?

Code :
  1. <?php
  2.   function dateLundi($annee, $numSemaine)
  3.   {
  4.     //-- retourne la date du lundi de la semaine N° xx -------------------------
  5.     //-- détermination de la date du lundi de la semaine N° 1 ------------------
  6.     $laDate = new DateTime($annee . '-01-01');
  7.     //-- N° de semaine du 1er lundi de janvier ---------------------------------
  8.     $laDate -> modify('first monday');
  9.     //-- si la semaine du 1er lundi est la semaine N° 1, c'est bon -------------
  10.     //-- sinon, c'est le lundi précédent ---------------------------------------
  11.     if ($laDate -> format('W') != '01')
  12.     {
  13.       $laDate -> modify('last monday');
  14.     }
  15.     //-- on ajoute le nombre de semaines ---------------------------------------
  16.     $laDate -> modify('+' . ($numSemaine - 1) . ' week');
  17.     return $laDate -> format('Y-m-d');
  18.   }
  19. //------------------------------------------------------------------------------
  20. //------------------------------------------------------------------------------
  21.   $annee = 2010;
  22.   $numSemaine = 10;
  23.   $numJour = 3;
  24.   $laDate = new DateTime(dateLundi($annee, $numSemaine));
  25.   $laDate -> modify('+' . ($numJour - 1) . ' day');
  26.   echo  $laDate -> format ('Y-m-d');
  27. ?>

Reply

Marsh Posté le 15-09-2010 à 14:39:13    

Voici une fonction que j'utilise dans mon soft Astres (cf ma signature) :

Code :
  1. function getFirstDayOfWeek($Week, $Year)
  2. {
  3.     if ($Week > 0)
  4.     {
  5.         if (date('W', mktime(0, 0, 0, 01, 01, $Year)) == 1)
  6.         {
  7.             $FirstDayOfYearStamp = mktime(0, 0, 0, 01, (01 + (($Week - 1) * 7)), $Year);
  8.         }
  9.         else
  10.         {
  11.             $FirstDayOfYearStamp = mktime(0, 0, 0, 01, (01 + ($Week * 7)), $Year);
  12.         }
  13.  
  14.         $Shift = 0;
  15.  
  16.         // For the years beginning with a sunday
  17.         if (date('w', $FirstDayOfYearStamp) == 0)
  18.         {
  19.             $Shift = 6 * 60 * 60 * 24;
  20.         }
  21.         else if (date('w', $FirstDayOfYearStamp) > 1)
  22.         {
  23.             $Shift = ((date('w', $FirstDayOfYearStamp) - 1) * 60 * 60 * 24);
  24.         }
  25.  
  26.         return date('Y-m-d', $FirstDayOfYearStamp - $Shift);
  27.     }
  28.  
  29.     // Error
  30.     return '';
  31. }


 
Ca te donne la date du lundi d'une semaine. A partir de la si en BD t'as un jour différent du lundi, suffit de faire ça :

Code :
  1. // On va dire que tu récupères dans $NumDay, $Week et $Year les 3 champs de ta BD
  2. $MondayDate = getFirstDayOfWeek($Week, $Year);
  3. switch($NumDay - 1)
  4. {
  5.    case 0:
  6.        $MyDate = $MondayDate;
  7.        break;
  8.  
  9.    case 1:
  10.        $MyDate = date('Y-m-d', strtotime("$MondayDate +1 day" ));
  11.        break;
  12.  
  13.    default:
  14.        $MyDate = date('Y-m-d', strtotime("$MondayDate +".($NumDay - 1)." days" ));
  15.        break;
  16. }
  17.  
  18. echo $MyDate;


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 15-09-2010 à 14:48:31    

Merci beaucoup a vous 2.
 
Je ne sais pas encore quelle solution je vais utiliser, je vais voir laquelle correspond le mieu a mon programme.
 
Bonne journee !

Reply

Marsh Posté le 15-09-2010 à 15:03:51    

L'algo dans les 2 solutions est globalement le même : trouver la date du lundi de la semaine et ajouter x jours si le jour demandé n'est pas un lundi.
 
ATTENTION à bien connaître la définition de ce qu'est la semaine n°1 d'une année (celle qui contient le 1er jeudi de l'année), sinon ça va pas le faire :D


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 16-09-2010 à 16:29:43    

Merci pour le message de prevention, j'ai deja eu ce probleme auparavant, je ne me ferai plus avoir si facilement :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed