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 :

Jeux sur les dates


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut Jeux sur les dates
    Bonjour,
    Je souhaite maitrisé la gestion des dates en php.
    On part de cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ini_set('date.timezone', 'Africa/Douala');
    $date = new DateTime('16-07-2011');
    1. Calculer le nombre de jours de ce mois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //Nombre de jour de ce mois
    $num = $date->format('t');
    Ca marche !

    2. Le dernier jour du mois avec la méthode modify()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //Dernier jour du mois
    $clause = '+'.$num.' days';
    echo $date->modify('+'.$num.' days');
    Ca ne marche pas.

    3. Calculer le nombre de semaines du mois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $num = $date->format('t')/7;
    Je pense il faut arrondir mais je ne sais pas faire.

    4. La date de début et fin de chaque semaine du mois
    Je ne sais par où commencer. Mais si j'ai la date de début de chaque semaine, il faudra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $date->modify('+7 days');
    Merci d'avance pour votre aide...

  2. #2
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 236
    Par défaut
    Citation Envoyé par okoweb Voir le message
    2. Le dernier jour du mois avec la méthode modify()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //Dernier jour du mois
    $clause = '+'.$num.' days';
    echo $date->modify('+'.$num.' days');
    Ca ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $clause = '+'.$num.' days';
    $date->modify('+'.$num.' days');
    echo $date->format('Y-m-d') . "\n";
    Et cela va t'incrémenter de 31 jours et non te donner le dernier jour du mois, tu connais déjà le nombre de jour tu n'as qu'à concaténer au mois et année actuels.

    3. Calculer le nombre de semaines du mois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $num = $date->format('t')/7;
    Je pense il faut arrondir mais je ne sais pas faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $num = $date->format('t')/7;
     
    echo number_format($num,0);

    4. La date de début et fin de chaque semaine du mois
    Je ne sais par où commencer. Mais si j'ai la date de début de chaque semaine, il faudra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $date->modify('+7 days');
    Récupère le premier jour du mois et tu incrémente de 7 puis de 1, 7, 1....

  3. #3
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date->mofify('+'.($num-intval($date->format('d')))+' day');
    par exemple pour aujourd'hui:
    $num=31;
    $date->format('d')=6;
    31-6=25;
    Si on rajoute 25 jours a la date courante, on tombe donc sur le 31 juillet

    3:

    Fonction round

    round(intval($date->format('t'))/7,2);
    pour arrondir à 2 chiffres après la virgule.

    4:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $date=new DateTime("now"); //date d'aujourd'hui
    $date->modify('+'.(8-date("N")).' day'); //date du début de cette semaine
    $nb=date("W"); //Numéro de cettesemaine
    //stockage dans une variable de toutes les semaine de l'annee en cour
    while ($nb > 0) //tant qu'on est pas au début d'année
    {
    	$date->modify('-1 day'); //on passe sur le dimanche (dernier jour de la semaine
    	$semaine[$nb]["fin"]=$date->format("d/m/Y"); //La fin de cette semaine
    	$date->modify('-6 day'); //on remonte au lundi
    	$semaine[$nb]["debut"]=$date->format("d/m/Y"); //date de debut de la semaine
    	$nb--; //on passe a la semaine d'avant
    }
    Tu retrouve donc un tableaux avec:
    $semaine[23]["debut"]=Date du début de la semaine 23
    $semaine[23]["fin"]=date de la fin de la semaine 23

    Si tu veux pour le mois, tu remplace

    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date->format("m") == $Moiscourant
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $MoisCourant=$date->format("m");
    Avant de commencer ta boucle

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Merci à vous tous, je teste...

  5. #5
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Bonsoir,

    puis surtout enlevez-moi le "s" pour le modificateur envoyé à la fonction modify()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $date->modify('+'.$num.' day'); // SANS LE S

  6. #6
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ska_root Voir le message
    Bonsoir,

    puis surtout enlevez-moi le "s" pour le modificateur envoyé à la fonction modify()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $date->modify('+'.$num.' day'); // SANS LE S
    C'est modifier, mais c'est plus anglais du coup, imagine on retire plusieurs jours

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    La fin des temps pointe à l'horizon...
    Je m'explique. Je souhaite pour un mois donné, créer un array des semaines de l'année du mois et pour chaque semaine, stocker la date de début et la date de fin. A cet effet j'ai modifié le code de @skeud ainsi :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    ini_set('date.timezone', 'Africa/Douala');
    $date = new DateTime('now'); //date d'aujourd'hui
    //Nombre de jour de ce mois
    $num = $date->format('t');
     
    //Premier jour du mois
    $date_debut_mois = $date->format('00-m-Y');
    $date1 = new DateTime($date_debut_mois); //date de ce jour
    $date1->modify('+'.(8-intval($date1->format("N"))).' day'); //date du début de cette semaine
    $nb_semaine_debut = intval($date1->format("W")); //Numéro de cette semaine
    echo $date_debut_mois;
    echo '<br />';
    echo $nb_semaine_debut;
    echo '<br />';
     
    //Dernier jour du mois
    $date->modify('+'.($num-intval($date->format('d'))).' days');
    $date_fin_mois = $date->format('d-m-Y');
    $date2 = new DateTime($date_fin_mois); //date de ce jour
    $date2->modify('+'.(8-intval($date2->format("N"))).' day'); //date du début de cette semaine
    $nb_semaine_fin = intval($date2->format("W")); //Numéro de cette semaine
    echo $date_fin_mois;
    echo '<br />';
    echo $nb_semaine_fin;
    echo '<br />';
     
    //stockage dans une variable de toutes les semaine du mois
    while ($nb_semaine_fin >= $nb_semaine_debut) //tant qu'on est pas au début du mois
    {
    	$date2->modify('-1 day'); //on passe sur le dimanche (dernier jour de la semaine
    	$semaine[$nb_semaine_fin]["fin"]=$date2->format("d/m/Y"); //La fin de cette semaine
    	$date2->modify('-6 day'); //on remonte au lundi
    	$semaine[$nb_semaine_fin]["debut"]=$date2->format("d/m/Y"); //date de debut de la semaine
    	$nb_semaine_fin --; //on passe a la semaine d'avant
    }
     
    echo '<pre>';
    print_r($semaine);
    echo '</pre>';
    et voici le résultat :
    Array
    (
    [31] => Array
    (
    [fin] => 31/07/2011
    [debut] => 25/07/2011
    )

    [30] => Array
    (
    [fin] => 24/07/2011
    [debut] => 18/07/2011
    )

    [29] => Array
    (
    [fin] => 17/07/2011
    [debut] => 11/07/2011
    )

    [28] => Array
    (
    [fin] => 10/07/2011
    [debut] => 04/07/2011
    )

    [27] => Array
    (
    [fin] => 03/07/2011
    [debut] => 27/06/2011
    )

    )
    J'ai bel et bien mon array mais il y'a des dates hors que mon mois qui s'infiltrent. C'est le cas de l'index 27 où la ne fait pas une date du mois de juillet. En fait je souhaite que mon array ait les dates de début et de fin du mois comme bornes.
    Donc pour mon besoin et pour le mois en cours je souhaite :
    Array
    (
    [31] => Array
    (
    [fin] => 31/07/2011
    [debut] => 25/07/2011
    )

    ....

    [27] => Array
    (
    [fin] => 03/07/2011
    [debut] => 01/07/2011
    )

    )
    L'idée est de parcourir cet array et passer les dates de debut et de fin de chaque semaine à une fonction php pour ressortir les états de vente de chaque semaine d'un mois donné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach($semaines as $tabl_result){
        semaineEtats($tabl_result['debut'],$tabl_result['fin']);
    }
    Meilleures salutations.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    L'astuce serait aussi je pense de modifier la valeur de la clé "debut" à $date_debut_mois du premier élément $semaine et aussi modifier la clé "fin" à $date_fin_mois du dernier élément de $semaine.
    Je ne sais donc pas comment attraper le premier et le dernier éléments de $semaine. Je rappelle $semaine est un tableau associatif.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo '<pre>';
    print_r($semaine);
    echo '</pre>';
    Résultat :
    Array
    (
    [31] => Array
    (
    [fin] => 31/07/2011
    [debut] => 25/07/2011
    )

    [30] => Array
    (
    [fin] => 24/07/2011
    [debut] => 18/07/2011
    )

    [29] => Array
    (
    [fin] => 17/07/2011
    [debut] => 11/07/2011
    )

    [28] => Array
    (
    [fin] => 10/07/2011
    [debut] => 04/07/2011
    )

    [27] => Array
    (
    [fin] => 03/07/2011
    [debut] => 27/06/2011
    )

    )
    Merci d'avance...

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Pour bien poser mon problème : comment se positionner sur le premier et le dernier index d'un array ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $semaine = Array(
    27 => Array('debut' => '27/06/2011', 'fin' => '03/07/2011'),
    28 => Array('debut' => '04/07/2011', 'fin' => '10/07/2011'),
    29 => Array('debut' => '11/07/2011', 'fin' => '7/07/2011'),
    31 => Array('debut' => '25/07/2011', 'fin' => '31/07/2011')
    );
    Sans toute fois connaitre à l'avance les indices de $semaine, comment attraper :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $semaine[27]['debut']
    // et
    $semaine[31]['fin']
    Merci d'avance...

  10. #10
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Avec un foreach:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($tableau as $key => $value)
    ça permet de parcourir ton tableau en ne prenant pas compte des indice.
    La valeur entre crochet (ton 27) est stocké dans $key.
    La valeur de cette case de tableaux est stocké dans $value.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Citation Envoyé par skeud Voir le message
    Avec un foreach:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($tableau as $key => $value)
    ça permet de parcourir ton tableau en ne prenant pas compte des indice.
    La valeur entre crochet (ton 27) est stocké dans $key.
    La valeur de cette case de tableaux est stocké dans $value.
    Comment attraper le premier et dernier $key dans la boucle foreach ? OU comment se positionner sur le premier et le dernier $key dans la boucle foreach...

    Merci d'avance...

  12. #12
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $min=9999;
    $max=0;
    foreach ($tableau as $key)
    {
      if ($key > $max)
        $max=$key;
      if ($key < $min)
        $min=$key;
    }
    $min = indice le plus petits de ton tableaux et superieur à 0;
    $max = indice le plus grands de ton tableaux.

    Cet exemple ne fonctionne que pour les nombre < 9999 dans les indices. Si tu as des indices supérieur à 9999, il faut mettre $min=maximum_possible;
    pareil pour $max

  13. #13
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    ini_set('date.timezone', 'Africa/Douala');
    $date = new DateTime('now'); //date d'aujourd'hui
    //Nombre de jour de ce mois
    $num = $date->format('t');
     
    //Premier jour du mois
    $date_debut_mois = $date->format('00-m-Y');
    $date1 = new DateTime($date_debut_mois); //date de ce jour
    $date1->modify('+'.(8-intval($date1->format("N"))).' day'); //date du début de cette semaine
    $nb_semaine_debut = intval($date1->format("W")); //Numéro de cette semaine
    echo $date_debut_mois;
    echo '<br />';
    echo $nb_semaine_debut;
    echo '<br />';
     
    //Dernier jour du mois
    $date->modify('+'.($num-intval($date->format('d'))).' days');
    $date_fin_mois = $date->format('d-m-Y');
    $date2 = new DateTime($date_fin_mois); //date de ce jour
    $date2->modify('+'.(8-intval($date2->format("N"))).' day'); //date du début de cette semaine
    $nb_semaine_fin = intval($date2->format("W")); //Numéro de cette semaine
    echo $date_fin_mois;
    echo '<br />';
    echo $nb_semaine_fin;
    echo '<br />';
     
    //stockage dans une variable de toutes les semaine du mois
    while ($nb_semaine_fin >= $nb_semaine_debut) //tant qu'on est pas au début du mois
    {
    	$date2->modify('-1 day'); //on passe sur le dimanche (dernier jour de la semaine
    	$semaine[$nb_semaine_fin]["fin"]=$date2->format("d/m/Y"); //La fin de cette semaine
    	$date2->modify('-6 day'); //on remonte au lundi
    	$semaine[$nb_semaine_fin]["debut"]=$date2->format("d/m/Y"); //date de debut de la semaine
    	$nb_semaine_fin --; //on passe a la semaine d'avant
    }
     
     
    while(list($cle,$val) = each($semaine)){
    if($cle == $nb_semaine_debut) $semaine[$nb_semaine_debut]['debut'] = $date_debut_mois;
    if($cle == $nb_semaine_fin) $semaine[$nb_semaine_fin]['fin'] = $date_fin_mois;
    }
     
     
    echo '<pre>';
    print_r($semaine);
    echo '</pre>';
    Resultat :
    Array
    (
    [31] => Array
    (
    [fin] => 31/07/2011
    [debut] => 25/07/2011
    )

    [30] => Array
    (
    [fin] => 24/07/2011
    [debut] => 18/07/2011
    )

    [29] => Array
    (
    [fin] => 17/07/2011
    [debut] => 11/07/2011
    )

    [28] => Array
    (
    [fin] => 10/07/2011
    [debut] => 04/07/2011
    )

    [27] => Array
    (
    [fin] => 03/07/2011
    [debut] => 00-07-2011
    )

    )
    Le résultat n'est satisfaisant que pour le mois en cours. Les bornes de mon array couvrent bien le mois.

    Mais si je change de mois ligne 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $date = new DateTime('11-08-2011'); //Aout 2011
    Les bornes ne sont plus respectées. Je pèche à quel niveau ?
    Array
    (
    [36] => Array
    (
    [fin] => 04/09/2011
    [debut] => 29/08/2011
    )

    [35] => Array
    (
    [fin] => 28/08/2011
    [debut] => 22/08/2011
    )

    [34] => Array
    (
    [fin] => 21/08/2011
    [debut] => 15/08/2011
    )

    [33] => Array
    (
    [fin] => 14/08/2011
    [debut] => 08/08/2011
    )

    [32] => Array
    (
    [fin] => 07/08/2011
    [debut] => 01/08/2011
    )

    [31] => Array
    (
    [fin] => 31/07/2011
    [debut] => 00-08-2011
    )

    )

    Merci d'avance...

  14. #14
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 80
    Par défaut
    Citation Envoyé par okoweb Voir le message
    Pour bien poser mon problème : comment se positionner sur le premier et le dernier index d'un array ?
    Bonjour, vous avez la fonction array_keys qui est faite pour ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $keys = array_keys($semaine);
    $debut =$semaine[$keys[0]];
    $fin = $semaine[$keys[count($keys)-1]];
    cela devrait faire l'affaire.

    HTH.

  15. #15
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    ini_set('date.timezone', 'Africa/Douala');
    $date = new DateTime('22-07-2011'); //date d'aujourd'hui
    //Nombre de jour de ce mois
    $num = $date->format('t');
     
    //Premier jour du mois
    $date_debut_mois = $date->format('01-m-Y');
    $date1 = new DateTime($date_debut_mois); //date de ce jour
    $date1->modify('+'.(8-intval($date1->format("N"))).' day'); //date du début de cette semaine
    $nb_semaine_debut = intval($date1->format("W")); //Numéro de cette semaine
    echo $date_debut_mois;
    echo '<br />';
    echo $nb_semaine_debut;
    echo '<br />';
     
    //Dernier jour du mois
    $date->modify('+'.($num-intval($date->format('d'))).' days');
    $date_fin_mois = $date->format('d-m-Y');
    $date2 = new DateTime($date_fin_mois); //date de ce jour
    $date2->modify('+'.(8-intval($date2->format("N"))).' day'); //date du début de cette semaine
    $nb_semaine_fin = intval($date2->format("W")); //Numéro de cette semaine
    echo $date_fin_mois;
    echo '<br />';
    echo $nb_semaine_fin;
    echo '<br />';
     
    //stockage dans une variable de toutes les semaine du mois
    while ($nb_semaine_fin >= $nb_semaine_debut) //tant qu'on est pas au début du mois
    {
    	$date2->modify('-1 day'); //on passe sur le dimanche (dernier jour de la semaine
    	$semaine[$nb_semaine_fin]["fin"]=$date2->format("d-m-Y"); //La fin de cette semaine
    	$date2->modify('-6 day'); //on remonte au lundi
    	$semaine[$nb_semaine_fin]["debut"]=$date2->format("d-m-Y"); //date de debut de la semaine
    	$nb_semaine_fin --; //on passe a la semaine d'avant
    }
     
    //Modification des éléments de mon array 1er et dernier
    $keys = array_keys($semaine);
    $debut = $semaine[$keys[count($keys)-1]]['debut'] = $date_debut_mois;
    $fin =$semaine[$keys[0]]['fin'] = $date_fin_mois;
     
    echo '<pre>';
    print_r($semaine);
    echo '</pre>';
    Ce code marche comme je veux, mais en fixant le mois à décembre j'ai cette erreur :
    Notice: Undefined variable: semaine in I:\wamp\www\dpip\index2.php on line 45

    Warning: array_keys() expects parameter 1 to be array, null given in I:\wamp\www\dpip\index2.php on line 45
    Je compte sur vous...

    Merci d'avance...

  16. #16
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 80
    Par défaut
    votre variable semaine a une portée locale à la boucle ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //stockage dans une variable de toutes les semaine du mois
    while ($nb_semaine_fin >= $nb_semaine_debut) //tant qu'on est pas au début du mois
    {
    	$date2->modify('-1 day'); //on passe sur le dimanche (dernier jour de la semaine
    	$semaine[$nb_semaine_fin]["fin"]=$date2->format("d-m-Y"); //La fin de cette semaine
    	$date2->modify('-6 day'); //on remonte au lundi
    	$semaine[$nb_semaine_fin]["debut"]=$date2->format("d-m-Y"); //date de debut de la semaine
    	$nb_semaine_fin --; //on passe a la semaine d'avant
    }
    dès que vous sortez de la boucle, votre variable "n'existe plus". Donc ce qu'il faut que vous fassiez, c'est déclarer votre variable en préalable à la boucle, et y instancier un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //stockage dans une variable de toutes les semaine du mois
    $semaine = array();
    while ($nb_semaine_fin >= $nb_semaine_debut) //tant qu'on est pas au début du mois
    {
    ...
    }

    HTH.

  17. #17
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Citation Envoyé par Agnello Fabrice Voir le message
    ...
    dès que vous sortez de la boucle, votre variable "n'existe plus". Donc ce qu'il faut que vous fassiez, c'est déclarer votre variable en préalable à la boucle, et y instancier un tableau.
    Moi je pense plutôt que le problème se pose dans la condition de boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $nb_semaine_debut= 49 // numéro de semaine de 01-12-2011, début du mois de décembre
     
    $nb_semaine_fin = 1 // numéro de semaine de 31-12-2011, fin du mois de décembre
     
    while ($nb_semaine_fin >= $nb_semaine_debut)
    Pour le mois de décembre, $nb_semaine_fin est plutôt inférieur à $nb_semaine_debut ce qui fauche la condition de boucle. Le 31-12-2011 rentre plutôt dans la première semaine de l'année suivante donc 2012.

    Merci pour votre aide...

  18. #18
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    J'ai changé de logique.
    Merci à vous tous, car vos posts m'ont permis de maitriser les dates.

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

Discussions similaires

  1. Equivalent à TRUNC ou ROUND d'Oracle sur les Dates ?
    Par swirtel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/05/2005, 10h45
  2. operation sur les dates
    Par elendil dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/04/2005, 13h14
  3. [C#] Calcul sur les dates avec des DateTimePicker
    Par alizee971 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/04/2005, 18h14
  4. MS Access et TQuery (probleme sur les dates)
    Par Djob dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/06/2004, 15h57
  5. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 12h45

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