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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

+ 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