<?php

// ------------------------------------------------------------------------- //
// Numéro de semaine.                                                        //
// ------------------------------------------------------------------------- //
// Auteur: Olivier Desmars                                                   //
// Email:  wizdom@voila.fr                                                   //
// Web:                                                                      //
// ------------------------------------------------------------------------- //

function numero_semaine ( $date_param )
{
    
//-------------------------------------------------------------------------------
    // Fonction qui renvoi le numéro de semaine de la date
    // passée en paramètre sous la forme "JJ/MM/AAAA"
    // $pivot = "Sunday" si le 1er jour de la semaine est le dimanche (anglo-saxons)
    // $pivot = "Monday" si le 1er jour de la semaine est le lundi (France)
    //
    // Renvoi 0 si la date passée en paramètre n'est pas valide
    // Renvoi -52 si la date passée appartient à la semaine 52 de l'année précédente
    //-------------------------------------------------------------------------------

    
$pivot = "Monday";

    
//---------------------------------------------------
    // Vérifie la validité de la date passé en paramètre
    //---------------------------------------------------

    
$day   = (integer) substr($date_param,0,2);
    
$month = (integer) substr($date_param,3,2);
    
$year  = (integer) substr($date_param,6,4);
    
    
//---------------------------------------------------
    // Vérifie la validité de la date passée en paramètre
    //---------------------------------------------------
    
    
if (!checkdate ($month,$day,$year)) return 0;

    
//-----------------------------------------------------------
    // Change le format de JJ/MM/AAAA en AAAAMMJJ pour permettre
    // la comparaison des dates sous forme de caractère
    //-----------------------------------------------------------
    
    
$date_param = substr($date_param,6,4).substr($date_param,3,2).substr($date_param,0,2);

    
//----------------------------------------------------------
    // Recherche le 1er jour de la 1ère semaine de l'année $year
    //----------------------------------------------------------
    
    
$cnt = 1; // on part du 1er janvier de l'année
    
    
while ( date ("l", mktime(0,0,0,1,$cnt,$year)) <> $pivot)       
    {
      
// Rajoute un jour tant qu'on a pas trouvé
      // le 1er jour de la 1ère semaine
      
$cnt += 1;
    }
    
    
$cnt -= 1;      // se positionne la veille ce jour clé
    
$week = -52; // nous sommes donc le dernier jour de
                    // la dernière semaine de l'an passé
    
$current_day = mktime(0,0,0,1,$cnt,$year);
        
    while (
date ("Ymd", $current_day) < $date_param )
        {
             
// incremente le numéro de semaine
             
if ($week == -52) { $week = 1 ; }
                          else {
$week += 1 ; }
             
// Ajoute une semaine à la date en cours
             
$current_day += 60*60*24*7 ;
        }
       
    
// Renvois le numero de la semaine trouvé
    
return $week;
}

?>