<?php

// ------------------------------------------------------------------------- //
// Voici une fonction qui renvoie le numero de la semaine par rapport à une  //
// date reçue en paramètre au format "JJ/MM/AAAA". Cette fonction intègre    //
// également un test de validité de la date.                                 //
// ------------------------------------------------------------------------- //
// Auteur: Antoine Im                                                        //
// Email:  calinoux@ifrance.com                                              //
// Web:    http://www.calinoux.fr.fm                                         //
// ------------------------------------------------------------------------- //

function numero_semaine ( $unedate )
{
    
// $date contient une valeur de la forme "JJ/MM/AAAA"

    
$jour = ( integer ) substr ( $unedate , 0 , 2 ) ;
    
$mois = ( integer ) substr ( $unedate , 3 , 2 ) ;
    
$annee = ( integer ) substr ( $unedate , 6 , 4 ) ;

    
// Renvois 0 si la date est invalide
    
if ( !checkdate ( $mois , $jour , $annee ) ) return 0 ;

    
// Recupere le nombre de jour passe depuis le debut de l'annee
    
$ladate = getdate ( mktime ( 0,0,0,$mois,$jour,$annee ) ) ;
    
$numero_jour = $ladate[yday] ;

    
// Recupere le numero du jour pour la date du 1er Janvier de l'annee choisi
    
$firstdate = getdate ( mktime ( 0,0,0,1,1,$annee ) ) ;
    
$premier_jour_de_l_annee = $firstdate[wday] ;

    
// Calcule la duree de la semaine 1
    // Si le nombre de jour est inferieur a cette duree, alors on est en semaine 1
    
$duree_semaine_1 = 7 - $premier_jour_de_l_annee ;
    if (
$numero_jour <= $duree_semaine_1 ) return 1 ;

    
// Recherche de la semaine par increment de 7 jours pour trouver l'intervale
    
$nbsemaine = 2;
    for (
$compteur = $duree_semaine_1 + 1 ; ; $compteur += 7 )
    {
        if (
$numero_jour >= $compteur and $numero_jour < ( $compteur+7 ) )
            break ;
        
$nbsemaine++ ;
    }

    
// Renvois le numero de la semaine
    
return $nbsemaine;
}

?>