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] Obtenir les dates de la semaine n°X et effectuer une requête sur la bdd


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 34
    Points
    34
    Par défaut [Dates] Obtenir les dates de la semaine n°X et effectuer une requête sur la bdd
    (re)Bonjour,

    Je travaille sur un agenda : http://mjc.lunion.free.fr/calendrier
    Je cherche à obtenir la date des jours de la semaine n°X, et effectuer une requete sur la bdd pour pouvoir afficher tout les evenments ayant lieu ces jours là. J'ai beau réfléchir, je m'embrouille trés vite dans le raisonnement, dur dur d'avoir l'esprit clair en débutant

    j'obtient le numéro de la semaine demandée par ce code (encore merci a "joe la mort")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $semaine = date("W", mktime(0,0,0,$mois,$jour,$annee)); echo $semaine;?>
    Mes données sont enregistrées dans MySQL, au format date YYYY-MM-DD.

    je voudrai faire en sorte que l'on puisse afficher tout les evenement d'une semaine. je pense a 3 façons de proceder (ne sachant ni comment les appliquer ni si c'est possible,)

    1/ Faire en sorte que le numero de semaine soit dans un champ de la table de la BDD, pour le comparer et n'afficher que ceux qui correspondent (a ce moment la, je devrais faire en sorte que dans mon formulaire ce numero de semaine soit calculé puis inséré dans la table en fonction de la date de l'evenement)

    Ou :

    2/ A partir de ce numéro de semaine , calculer la date des jours de la semaine X, puis appeler ces dates dans la BDD (est il possible de faire quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $requete = "SELECT info_titre FROM infos WHERE date = jour1 ou jour2 ou jour3 ou jour4 ou jour5 ou jour6 ou jour7";
    voire plus simple [code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $requete = "SELECT info_titre FROM infos WHERE date = de jour1 jusqua  jour7";
    ou encore (plus simple si c possible)

    3/ A partir de ce numéro de semaine, faire une requete qui dirait quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $requete = "SELECT info_titre FROM infos WHERE date = 1desjoursdelasemaineX;
    Quelle est la façon la plus intérressante et comment la mettre en place ?

    Merci à vous ;-)

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Avec ça :
    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
     
    <?php
    $annee = 2007;
    $mois = 5;
    $jour = 7;
     
    $timestampJour = mktime(0, 0, 0, $mois, $jour, $annee);
     
    $jourDeb = ((date('w', $timestampJour) == 0) || (date('w', $timestampJour) > 1)) ? date('Y-m-d', strtotime('last monday', $timestampJour)) : date('Y-m-d', $timestampJour);
    $jourFin = (date('w', $timestampJour) > 0) ? date('Y-m-d', strtotime('next sunday', $timestampJour)) : date('Y-m-d', $timestampJour);
     
    $requete = 'SELECT info_titre 
    	    FROM infos 
     	    WHERE date BETWEEN \'' . $jourDeb . '\' AND \'' . $jourFin . '\'';
    ?>

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 34
    Points
    34
    Par défaut
    Merci, ca marche super

    je voudrais faire la meme chose pour un affichage par mois, mais je ne comprends pas tout.

    ce que je crois avoir compris du code (pas grd chose ):

    calcul du "timestamp" à partir du jour choisi (choisi en fixant les variables $mois $jour $annee)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $timestampJour = mktime(0, 0, 0, $mois, $jour, $annee);
    c'est la que je comprends moins bien ce qu'il se passe : ca calcule le jour du début, mais comment ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $jourDeb = ((date('w', $timestampJour) == 0) || (date('w', $timestampJour) > 1)) ? date('Y-m-d', strtotime('last monday', $timestampJour)) : date('Y-m-d', $timestampJour);
    A priori si on m'explique celle la , je comprendrai ce qu'il se passe pour $jourFin (ce sera une bonne occsaion de savoir si j'ai compris)

    Merci

    PS : pour le calcul du mois, je dois pouvoir me servir de $timestamp, extraire le mois avec mktime , ce sera plus simple, c'est juste ?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    La syntaxe ci-dessous s'appelle un opérateur ternaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $jourDeb = ((date('w', $timestampJour) == 0) || (date('w', $timestampJour) > 1)) ? date('Y-m-d', strtotime('last monday', $timestampJour)) : date('Y-m-d', $timestampJour);
    C'est une alternative à la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ((date('w', $timestampJour) == 0) || (date('w', $timestampJour) > 1))
    {
            date('Y-m-d', strtotime('last monday', $timestampJour));
    }
    else 
    {
    	date('Y-m-d', $timestampJour);
    }
    En français :
    si le N° du jour dans la semaine (de 0 => dimanche à 6 => samedi) = 0 ou > 1
    le jour début = le lundi précédent (last monday)
    sinon
    le jour début = le jour cherché

    Pour le mois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	$annee = 2007;
    	$mois = 5;
    	$jour = 7;
     
    	$timestampJour = mktime(0, 0, 0, $mois, $jour, $annee);
     
    	$jourDeb = $annee . '-' . $mois  . '-01';
    	$jourFin = $annee . '-' . $mois  . date('t', $timestampJour);
    Toutes les fonctions de dates et heure sont là :
    http://fr.php.net/manual/fr/ref.datetime.php

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 34
    Points
    34
    Par défaut
    ok , donc || correspond à un "ou", le "?" à alors et ":" à sinon (le si etant induit dans le fait d'utiliser un "operateur ternaire")
    ce qui donnerai pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $jourFin = (date('w', $timestampJour) > 0) ? date('Y-m-d', strtotime('next sunday', $timestampJour)) : date('Y-m-d', $timestampJour);
    Si N° jour de la semaine > 0 alors le jour de fin est le dimanche suivant , sinon le jour de fin = le jour cherche, c'est juste ?

    Ici,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $jourDeb = $annee . '-' . $mois  . '-01';
    	$jourFin = $annee . '-' . $mois  . date('t', $timestampJour);
    $jourdeb = dernier jour du mois d'avant
    $jourfin = dernier jour du mois choisi (le t donnant le nombre de jour selon le mois, 28 pour février par ex) c'est bien ça ?

    j'ai du rajouter '-' avant date('t', $timestampJour); sinon il manquait un tiret dans la date, je suis tout fier de l'avoir trouvé tout seul (bon d'accord c'etait pas dur !)

    En tout cas tout marche, la semaine et le mois

    un MERCI

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Désolé pour le '-' manquant.

    $jourdeb = dernier jour du mois d'avant
    Non, le 1er jour du mois recherché.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par jeca
    Désolé pour le '-' manquant.
    Nul n'est parfait, tu m'as beaucoup beaucoup aidé, je t'en remercie énormément !

    J'ai compris pourquoi je me suis trompé sur $jourdeb, j'ai lu 'moins un' au lieu de 'tiret un' comme quoi il est vicieu ce tiret !!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2008, 11h50
  2. [SQL2005] Obtenir les dates calendrier
    Par frechy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/04/2007, 22h44
  3. Réponses: 4
    Dernier message: 06/09/2006, 14h04
  4. Réponses: 14
    Dernier message: 10/08/2006, 15h53
  5. Réponses: 4
    Dernier message: 23/01/2006, 10h13

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