IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Dates] Numéro de semaine vers timestamp


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut [Dates] Numéro de semaine vers timestamp
    Bonjour,

    Tout le monde connait la fonction date() qui peut donner le numéro de la semaine d'un timestamp unix si on lui donne à manger le paramètre "W".

    Seulement voilà, je vois vraiment pas comment faire l'inverse, à savoir récupérer le timestamp du 1er jour de la semaine quand on connais l'année et le numéro de la semaine.

    J'ai bien écrit une petite fonction censé me faire ça, mais elle pue... c'est du vilain bricolage et en plus, elle bug dans des cas particulier que je n'ai pas réussi à isolé...

    je la poste donc pour info seulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function SemaineStamp($n_semaine, $annee)
    {
            $jour1 = date("w", mktime(0,0,0,1,1,$annee));
            if(!$jour1) $jour1 = 7;
            $jour1--;
            $stamp_semaine_1 = mktime(0,0,0,1,1,$annee) + ( 86400 * ( 7 - $jour1 ) );
            return ( $stamp_semaine_1 + (($n_semaine - 1) * 604800)); 
    }

    Si quelqun a une idée ou une fonction à me proposer, je suis preneur !
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Je te conseille de tester quand même... (le gars pas sûr du tout de lui )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function SemaineStamp($n_semaine, $annee) {
     
    /* Timestamp du premier de l'an */
    $Tstamp=mktime(0, 0, 0, 1, 1, $annee);
     
    /* Le premier jour de l'année n'est pas forcément dans la premiere semaine de l'année; il peut être dans la dernière semaine de l'année précédente */
    if(date("W", $Tstamp)==1) $n_semaine--;
     
    /* Pour revenir au premier jour de la semaine donc le Lundi, si on n'est pas déjà un lundi */
    if(date("D", $Tstamp)!="Mon") $lundi=" last Monday";
     
    /* On renvoie de le timestamp du premier de l'an + x semaines puis du lundi de la semaine trouvée donc en somme du lundi de la semaine recherchée*/
    return strtotime("+ ".$n_semaine." week".$lundi, $Tstamp);
    }

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Arf, c'est p'tet ça qui fait buggé mon appli ! cette année ! la 1er semaine commence le 1er (un lundi), cas que je ne prend p'tet pas en compte...
    je refait tourner l'algo et je vous tien au courrant !
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    L'heure est grave (pour moi)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo date("W",mktime(1,0,0,12,31,2007));
    va affiché... 1 !

    La 1er semaine de 2008 commence donc en 2007 (ca marche aussi en 2002 ou 2012), alors qu'habituellement, la 1er semaine de l'année commence au 1er lundi de l'année (genre 2005, ou 2006)...

    C'est la merde, mon algo tient pas du tout la route, et pire, je me rend compte que je connais pas la regle de definition des N° de semaine !

    Si quelqun peut me sortir de cet embaras, je lui en serait reconnaissant !
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    GROS PORC POWER !!!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    function SemaineStamp($n_semaine, $annee)
    {
            // 1er jour de l'année :
            $jour1 = mktime(0,0,0,1,1,$annee);
            $jour_retenu = $jour1;
     
            if(date("W", $jour1) == 1)
            {
                    while(date("W", $jour1) == 1)
                    {
                            $jour_retenu = $jour1;
                            $jour1 -= 86400;
                    }
            }
            else
            {
                    while(date("W", $jour1) != 1)
                    {                        
                            $jour1 += 86400;
                    }
                    $jour_retenu = $jour1;
            }        
            return $jour_retenu + (604800 * ($n_semaine - 1));
    }
    Bon, là, j'ai vraiment honte ! Si je continu comme ça, mes scripts ne tourneront plus que que des PC equipés de multi dual core 64 bits a 3 Ghz et avec 8 Go de RAM minimum !

    En attendant, ça marche !
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Crystal] transformation d'une date en numéro de semaine
    Par barna dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 24/03/2017, 09h41
  2. Timestamp vers numéro de semaine
    Par kevinf dans le forum Langage
    Réponses: 1
    Dernier message: 23/04/2015, 22h08
  3. [Dates] Numéros des semaines
    Par tomenbois dans le forum Langage
    Réponses: 1
    Dernier message: 06/07/2007, 09h21
  4. [Dates] Numéro de semaine ... començant le samedi
    Par Lyna31 dans le forum Langage
    Réponses: 1
    Dernier message: 12/03/2007, 09h47
  5. [Dates] numéro de semaine
    Par jules_29 dans le forum Langage
    Réponses: 4
    Dernier message: 13/09/2006, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo