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] Calendrier : sélectionner une date


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut [Dates] Calendrier : sélectionner une date
    Bonjour.

    J'ai récupéré sur le site le source d'un calendrier :
    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
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <?php
    //Creating general vars
    $year = date("Y");
    if(!isset($_GET['month'])) $monthnb = date("n");
    else {
        $monthnb = $_GET['month'];
        $year = $_GET['year'];
        if($monthnb <= 0) {
            $monthnb = 12;
            $year = $year - 1;
        }
        elseif($monthnb > 12) {
            $monthnb = 1;
            $year = $year + 1;
        }
    }
    $day = date("w");
    $nbdays = date("t", mktime(0,0,0,$monthnb,1,$year));
    $firstday = date("w",mktime(0,0,0,$monthnb,1,$year));
     
    //Replace the number of the day by its french name
    $daytab[1] = 'Lu';
    $daytab[2] = 'Ma';
    $daytab[3] = 'Me';
    $daytab[4] = 'Je';
    $daytab[5] = 'Ve';
    $daytab[6] = 'Sa';
    $daytab[7] = 'Di';
     
    //Build the calendar table
    $calendar = array();
    $z = (int)$firstday;
    if($z == 0) $z =7;
    for($i = 1; $i <= ($nbdays/5); $i++){
        for($j = 1; $j <= 7 && $j-$z+1+(($i*7)-7) <= $nbdays; $j++){
            if($j < $z && ($j-$z+1+(($i*7)-7)) <= 0){
                    $calendar[$i][$j] = null;
            }
            else {
                $calendar[$i][$j] = $j-$z+1+(($i*7)-7);            
            }
        }
    }
     
    //Replace the number of the month by its french name
    switch($monthnb) {
        case 1: $month = 'Janvier'; break;
        case 2: $month = 'Fevrier'; break;
        case 3: $month = 'Mars'; break;
        case 4: $month = 'Avril'; break;
        case 5: $month = 'Mai'; break;
        case 6: $month = 'Juin'; break;
        case 7: $month = 'Juillet'; break;
        case 8: $month = 'Août'; break;
        case 9: $month = 'Septembre';    break;
        case 10: $month = 'Octobre'; break;
        case 11:    $month = 'Novembre';    break;
        case 12:    $month = 'Décembre';    break;
    }
    ?>
    <div id="calendrier">
        <table>
            <tr>
                <th><span class="linkcal"><a href="index.php?month=<?php echo $monthnb - 1; ?>&year=<?php echo $year; ?>"><<</a></span></th>
                <th colspan="5" class="headcal"><?php echo($month.' '.$year);  ?></th>
                <th><span class="linkcal"><a href="index.php?month=<?php echo $monthnb + 1; ?>&year=<?php echo $year; ?>">>></a></span></th>
            </tr>
            <?php
                echo('<tr>');
                for($i = 1; $i <= 7; $i++){
                    echo('<th>'.$daytab[$i].'</th>');
                }
                echo('</tr>');
                for($i = 1; $i <= count($calendar); $i++) {
                    echo('<tr>');
                    for($j = 1; $j <= 7 && $j-$z+1+(($i*7)-7) <= $nbdays; $j++){
                        if($j-$z+1+(($i*7)-7) == date("j") && $monthnb == date("n") && $year == date("Y")) echo('<th class="current">'.$calendar[$i][$j].'</th>');
                        else echo('<th>'.$calendar[$i][$j].'</th>');
                    }
                    echo('</tr>');
                }
            ?>
        </table>
    </div>
    Je voudrais pouvoir récupérer une date sélectionnée en passant par javascript mais je ne sais pas où placer "onclick='javascript:afficher_date(this.value);"

    Merci de m'aider
    Dommage que l'auteur du code n'ait pas défini les class css utilisé dans le code.

  2. #2
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut

    Je t'aurais bien dis de le mettre dans tes td mais il n'y en a pas, il utilise que des th ce qui n'est pas correct car les th sont des entêtes de colonnes normalement.
    Sinon tu peux toujours le mettre ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo('<th onclick="afficher_date(this.value);">'.$daytab[$i].'</th>');
    et là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo('<th onclick="afficher_date(this.value);">'.$calendar[$i][$j].'</th>');

  3. #3
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Merci.

    Pour les jours de la semaine et les dates, j'ai mis td au lieu de th.
    Quand je clique sur une date, la fonction javascript me revoie "undifined" au lieu de la valeur du calendrier
    la fonction javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <Script Language="Javascript">
    function afficher_date(valeur)
    {
    	alert(valeur);
    }
    </script>
    Je ne vois pas le problème

  4. #4
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Personne a une idée ???

    J'ai testé la proposition de trotters213 mais la fonction me renvoie "undifined"

    Sinon est ce que vous auriez le source d'un calendrier qui renvoie une valeur quand on clique sur une date.

  5. #5
    Membre Expert

    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
    Par défaut
    Bonjour,

    A adapter à ton code :
    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
    <!DOCTYPE html 
         PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
      <head>
        <title>Titre</title>
    		<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
    		<script type="text/javascript">
    		  function toto(valeur)
    		  {
    		    alert(valeur);
    		  }
    		</script>
      </head>
    	<body>
        <table width="50%" align="center" border="0">
          <tr>
            <td onclick="toto(this.firstChild.nodeValue)">
              test
            </td>
          </tr>
        </table>
      </body>
    </html>
    Mais puisque ta ligne est créée dynamiquement, pourquoi ne pas mettre en paramètre de ta fonction la même variable que celle qui se trouve entre les balises ?

  6. #6
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    Jette un coup d'oeil à cette page sinon : http://php.developpez.com/sources/?page=dates

  7. #7
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Merci trotters213.
    C'est exactement le code que j'ai pris mais on ne peut pas sélectionner de date, et c'est bien là mon problème.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Merci pour vos réponses, je suis presque au bout.
    Quand je clique sur mon bouton OK, le calendrier s'affiche, quand je clique sur un jour je récupère la valeur et je cache le calendrier.
    Le problème qui me reste : quand je clique sur "<<" ou sur ">>" le code rappelle la page et donc le calendrier est caché.
    Comment je peux faire pour afficher le calendrier quand on clique sur "<<" ou sur ">>".
    J'ai essayé un tas de trucs mais rien ne marche.
    Je remets le code modifié
    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
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    <Script Language="Javascript">
    function hide(identifiant) {
            if (document.getElementById(identifiant).className == "hidden") {
                document.getElementById(identifiant).className = "visible";
            }
            else if (document.getElementById(identifiant).className == "visible") {
                document.getElementById(identifiant).className = "hidden";
            }
    }
     
    function afficher_date(valeur)
    {
    	document.date.madate.value= valeur + "/" + document.date.mois.value + "/" + document.date.annee.value ;
    	hide('mondiv');
    }
    </script>
    <BODY>
    mon site
    <br>
    <p align=center>
     
    <?php
    //Creating general vars
    $year = date("Y");
    if(!isset($_GET['month'])) $monthnb = date("n");
    else {
        $monthnb = $_GET['month'];
        $year = $_GET['year'];
        if($monthnb <= 0) {
            $monthnb = 12;
            $year = $year - 1;
        }
        elseif($monthnb > 12) {
            $monthnb = 1;
            $year = $year + 1;
        }
    }
    $day = date("w");
    $nbdays = date("t", mktime(0,0,0,$monthnb,1,$year));
    $firstday = date("w",mktime(0,0,0,$monthnb,1,$year));
     
    //Replace the number of the day by its french name
    $daytab[1] = 'Lu';
    $daytab[2] = 'Ma';
    $daytab[3] = 'Me';
    $daytab[4] = 'Je';
    $daytab[5] = 'Ve';
    $daytab[6] = 'Sa';
    $daytab[7] = 'Di';
     
    //Build the calendar table
    $calendar = array();
    $z = (int)$firstday;
    if($z == 0) $z =7;
    for($i = 1; $i <= ($nbdays/5); $i++){
        for($j = 1; $j <= 7 && $j-$z+1+(($i*7)-7) <= $nbdays; $j++){
            if($j < $z && ($j-$z+1+(($i*7)-7)) <= 0){
                    $calendar[$i][$j] = null;
            }
            else {
                $calendar[$i][$j] = $j-$z+1+(($i*7)-7);            
            }
        }
    }
     
    //Replace the number of the month by its french name
    switch($monthnb) {
        case 1: $month = 'Janvier'; break;
        case 2: $month = 'Fevrier'; break;
        case 3: $month = 'Mars'; break;
        case 4: $month = 'Avril'; break;
        case 5: $month = 'Mai'; break;
        case 6: $month = 'Juin'; break;
        case 7: $month = 'Juillet'; break;
        case 8: $month = 'Août'; break;
        case 9: $month = 'Septembre';    break;
        case 10: $month = 'Octobre'; break;
        case 11: $month = 'Novembre';    break;
        case 12: $month = 'Décembre';    break;
    }
    ?>
    <div id="mondiv" class="hidden" align="center">
    <div id="calendrier" align="center">
        <table border=1 style="background-color:e0e0e0">
            <tr>
                <th><a href="index.php?page=test&month=<?php echo $monthnb - 1; ?>&year=<?php echo $year; ?>"><<</a></span></th>
                <th colspan="5" class="headcal"><?php echo($month.' '.$year);  ?></th>
                <th><a href="index.php?page=test&month=<?php echo $monthnb + 1; ?>&year=<?php echo $year; ?>">>></a></span></th>
            </tr>
            <?php
                echo('<tr>');
                for($i = 1; $i <= 7; $i++){
                    echo('<td>'.$daytab[$i].'</td>');
                }
                echo('</tr>');
                for($i = 1; $i <= count($calendar); $i++) {
                    echo('<tr>');
                    for($j = 1; $j <= 7 && $j-$z+1+(($i*7)-7) <= $nbdays; $j++){
                        if($j-$z+1+(($i*7)-7) == date("j") && $monthnb == date("n") && $year == date("Y")) echo('<td class="current" onclick="afficher_date(this.firstChild.nodeValue);" style="cursor:pointer">'.$calendar[$i][$j].'</td>');
                        else echo('<td onclick="javascript:afficher_date(this.firstChild.nodeValue)" style="cursor:pointer">'.$calendar[$i][$j].'</td>');
                    }
                    echo('</tr>');
                }
            ?>
        </table>
    </div>
    </div>
    <p align="center">
    <input type="button" name="bouton" value="ok" onclick="javascript:hide('mondiv')">
    <form name="date">
    <input type="text" name="madate" value="">
    <input type="hidden" name="mois" value="<?php echo($monthnb); ?>">
    <input type="hidden" name="annee" value="<?php echo($year); ?>">
    </form>
    Merci d'avance

  9. #9
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    Rajoute une valeur dans ton URL quand tu cliques sur << ou >>.
    Tu testes cette valeur. Si elle existe alors tu affiche le calendrier (ça veut dire que tu viens de cliquer sur << ou >>) sinon tu ne fais rien.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Merci pour toutes les réponses.
    Mon problème est maintenant résolu.

    Est-il possible qu'un modérateur complète le source http://php.developpez.com/sources/?page=dates
    pour que ce calendrier puisse être utilisé dans du code (que l'on puisse cliquer sur une valeur pour récupérer la date).

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

Discussions similaires

  1. [MySQL] Formater une date américaine a une date français ?
    Par melodyyy dans le forum PHP & Base de données
    Réponses: 30
    Dernier message: 18/07/2008, 16h14
  2. [SQL] Ajouter une durée à une date et obtenir une date valide
    Par bigltnt dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/06/2007, 14h55
  3. [Débutant] Calcul d'une date à partir d'une date de départ et d'une durée
    Par Marmotton76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/04/2007, 10h39
  4. Réponses: 2
    Dernier message: 21/03/2007, 16h06
  5. Réponses: 14
    Dernier message: 09/01/2007, 16h19

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