Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/02/2011, 09h49   #1
Nouveau Membre du Club
 
Avatar de pitoumad
 
Inscription : décembre 2009
Messages : 81
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : décembre 2009
Messages : 81
Points : 29
Points : 29
Par défaut numéro de la semaine

Bonjour
En php 4.0.4 je n'ai pas le paramètre W de la fonction date('W') qui me permettrait de récupérer le numéro de la semaine (à partir de php 4.1).
Je ne veux pas la semaine en cours, mais celle pour une date donnée.
Savez vous comment je peux calculer ça dans une fonction perso ?
J'ai beaucoup cherché dans la FAQ mais sans succès.
Merci de votre aide.
__________________
"La seule chose promise d’avance à l’échec, c’est celle que l’on ne tente pas." Paul-Emile Victor
pitoumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 10h14   #2
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Euh, 4.0.4. Pourquoi utiliser un ancêtre?

Tu ne peux pas passer à php 5.3 ? (il y a des directives de configuration dans le .htaccess à mettre suivant les hébergeurs).

Sinon, une simple recherche:

Code :
1
2
3
4
5
6
7
8
9
10
<?
//calcul du numéro de semaine
$date=time();
function semaine($date)
{
   $jour=date("z",$date);
   $num_sem=($jour/7)+1;
   $num=intval($num_sem);
   return $num;
}
Vu la date, ça doit fonctionner sous php4...
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 11h26   #3
Nouveau Membre du Club
 
Avatar de pitoumad
 
Inscription : décembre 2009
Messages : 81
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : décembre 2009
Messages : 81
Points : 29
Points : 29
Pour info, c'est pas moi qui choisi de faire évoluer la version PHP, c'est "plus haut"...

Ton programme fonctionne, mais pas pour la norme ISO-8601:1988 (numéro de la semaine de l'année courante, commençant par la première semaine de l'année avec au moins 4 jours de semaine, avec le Lundi comme début de semaine).

J'ai essayé :
Code :
$semaine_ev=strftime("%W", mktime(1,0,0,$mois_ev, $jour_ev, $annee_ev));
Ce qui prend en compte la semaine 52 pour le début de l'année.
Mais cela ne marche pas quand il y a 53 semaines (comme en 2009) : il y aurait bien la même chose avec %V, mais inconnu et donc plante chez moi.
Je ne sais pas comment tester cela pour corriger.

Une idée ?
__________________
"La seule chose promise d’avance à l’échec, c’est celle que l’on ne tente pas." Paul-Emile Victor
pitoumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 16h28   #4
Nouveau Membre du Club
 
Avatar de pitoumad
 
Inscription : décembre 2009
Messages : 81
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : décembre 2009
Messages : 81
Points : 29
Points : 29
J'ai trouvé cette fonction qui répond à mon problème :

Numéro de la semaine - norme ISO-8601 par Thomas Pequet [2] | |
Fonction qui retourne le numéro de la semaine par rapport a une date (jour / mois / annee) - selon la norme ISO-8601
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<? 
/**universal 
 * Fonction qui retourne le numéro de la semaine par rapport a une date 
 * Auteur : Thomas Pequet - webmaster@memotoo.com 
 * Url : http://www.memotoo.com 
 * @param jour:Int Jour 
 * @param mois:Int Mois 
 * @param annee:Int Année 
 * @return Numéro de semaine 
 */ 
function numero_semaine($jour,$mois,$annee) 
{ 
    /* 
     * Norme ISO-8601: 
     * - La semaine 1 de toute année est celle qui contient le 4 janvier ou que la semaine 1 de toute année est celle qui contient le 1er jeudi de janvier. 
     * - La majorité des années ont 52 semaines mais les années qui commence un jeudi et les années bissextiles commençant un mercredi en possède 53. 
     * - Le 1er jour de la semaine est le Lundi 
     */  
 
    // Définition du Jeudi de la semaine 
    if (date("w",mktime(12,0,0,$mois,$jour,$annee))==0) // Dimanche 
        $jeudiSemaine = mktime(12,0,0,$mois,$jour,$annee)-3*24*60*60; 
    else if (date("w",mktime(12,0,0,$mois,$jour,$annee))<4) // du Lundi au Mercredi 
        $jeudiSemaine = mktime(12,0,0,$mois,$jour,$annee)+(4-date("w",mktime(12,0,0,$mois,$jour,$annee)))*24*60*60; 
    else if (date("w",mktime(12,0,0,$mois,$jour,$annee))>4) // du Vendredi au Samedi 
        $jeudiSemaine = mktime(12,0,0,$mois,$jour,$annee)-(date("w",mktime(12,0,0,$mois,$jour,$annee))-4)*24*60*60; 
    else // Jeudi 
        $jeudiSemaine = mktime(12,0,0,$mois,$jour,$annee); 
 
    // Définition du premier Jeudi de l'année 
    if (date("w",mktime(12,0,0,1,1,date("Y",$jeudiSemaine)))==0) // Dimanche 
    { 
        $premierJeudiAnnee = mktime(12,0,0,1,1,date("Y",$jeudiSemaine))+4*24*60*60; 
    } 
    else if (date("w",mktime(12,0,0,1,1,date("Y",$jeudiSemaine)))<4) // du Lundi au Mercredi 
    { 
        $premierJeudiAnnee = mktime(12,0,0,1,1,date("Y",$jeudiSemaine))+(4-date("w",mktime(12,0,0,1,1,date("Y",$jeudiSemaine))))*24*60*60; 
    } 
    else if (date("w",mktime(12,0,0,1,1,date("Y",$jeudiSemaine)))>4) // du Vendredi au Samedi 
    { 
        $premierJeudiAnnee = mktime(12,0,0,1,1,date("Y",$jeudiSemaine))+(7-(date("w",mktime(12,0,0,1,1,date("Y",$jeudiSemaine)))-4))*24*60*60; 
    } 
    else // Jeudi 
    { 
        $premierJeudiAnnee = mktime(12,0,0,1,1,date("Y",$jeudiSemaine)); 
    } 
 
    // Définition du numéro de semaine: nb de jours entre "premier Jeudi de l'année" et "Jeudi de la semaine"; 
    $numeroSemaine =     (  
                    (  
                        date("z",mktime(12,0,0,date("m",$jeudiSemaine),date("d",$jeudiSemaine),date("Y",$jeudiSemaine)))  
                        - 
                        date("z",mktime(12,0,0,date("m",$premierJeudiAnnee),date("d",$premierJeudiAnnee),date("Y",$premierJeudiAnnee)))  
                    ) / 7  
                ) + 1; 
 
    // Cas particulier de la semaine 53 
    if ($numeroSemaine==53) 
    { 
        // Les années qui commence un Jeudi et les années bissextiles commençant un Mercredi en possède 53 
        if (date("w",mktime(12,0,0,1,1,date("Y",$jeudiSemaine)))==4 || (date("w",mktime(12,0,0,1,1,date("Y",$jeudiSemaine)))==3 && date("z",mktime(12,0,0,12,31,date("Y",$jeudiSemaine)))==365)) 
        { 
            $numeroSemaine = 53; 
        } 
        else 
        { 
            $numeroSemaine = 1; 
        } 
    } 
 
    //echo $jour."-".$mois."-".$annee." (".date("d-m-Y",$premierJeudiAnnee)." - ".date("d-m-Y",$jeudiSemaine).") -> ".$numeroSemaine."<BR>"; 
 
    return sprintf("%02d",$numeroSemaine); 
} 
?>
__________________
"La seule chose promise d’avance à l’échec, c’est celle que l’on ne tente pas." Paul-Emile Victor
pitoumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h43.


 
 
 
 
Partenaires

Hébergement Web