<?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;
}
?>