Bonjour,
J'ai suivi le tuto "Créer un calendrier" mais j'aimerais savoir comment était-il possible de générer le calendrier sur 1 an à partir de la date courante et ce chaque mois ?
Par ex :
du 01 novembre 2012 (mois actuel) au 31 octobre 2013
du 01 décembre 2012 au 30 novembre 2013

Chaque mois, le calendrier se réactualise.
Comment faire pour que les mois après décembre 2012 reprennent à Janvier 2013?

Merci d'avance pour vos réponses !

7 réponses


gilbert1995
Réponse acceptée

Ce n'est pas parfait mais tu peux t'y référer http://pastebin.com/9JHMcaCh

s4p
Réponse acceptée

Ligne 80 :
On range dans data-year l'année du mois traité

data-year="<?php echo $year; ?>"

Ligne 19 :
On va rechercher cette valeur pour l'afficher dans la div correspondante

$('body>div.year').html($('#month'+month).data('year'));

Ce qui donne :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
        <head>
                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <title>Calendrier</title>
                    <link rel="stylesheet" type="text/css" href="style.css" />
                    <script type="text/javascript" src='http://code.jquery.com/jquery-1.8.3.min.js'></script>
                    <script type="text/javascript">
                        jQuery(function($){
                            $('.month').hide();
                            $('#month<?php echo date('n');?>').show();
                            $('#linkMonth<?php echo date('n');?>').addClass('active');
                            var current = <?php echo date('n');?>;
                            $('.months a').click(function(){
                                var month = $(this).attr('id').replace('linkMonth','');
                                if(month != current){
                                    $('#month'+current).slideUp();
                                    $('#month'+month).slideDown();
                                    $('body>div.year').html($('#month'+month).data('year'));
                                    $('.months a').removeClass('active');
                                    $('#linkMonth'+month).addClass('active');
                                    current = month;
                                }
                                return false;
                           });
                        });
                    </script>
            </head>

            <body>
                    <?php
                            $months = array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
                            $weeks = array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
                            function getYear($time) {
                                    $r = array();
                                    $date = strtotime(date($time));
                                    //structure tbl $r[annee][mois][JOUR] = JOUR DE LA SEMAINE;
                                            while($date <= strtotime('+1 Year')) {
                                                    $y = date('Y', $date);
                                                    $m = date('n',$date);
                                                    $d = date('j',$date);
                                                    $w = date('w',$date);
                                                    $r$y]$m]$d] = $w;
                                                    $date += (24*60*60);
                                            }
                                    return $r;
                            }

                            $calendar = getYear(date('Y-m-01'));
                            $year = key($calendar);
                    ?>

                    <div class="year">
                            <?php echo $year;?>
                    </div>
                    <div class="months">
                            <ul>
                            <?php
                                    //Affichage month
                                    foreach($months as $k=>$v) {
                                        if($k >= date('n')-1) {
                                            echo "<li><a href='#' id='linkMonth".($k+1)."'>".utf8_encode(substr(utf8_decode($v),0,3))."</a></li>";
                                        }                                        
                                    }

                                   foreach($months as $k=>$v) {
                                        if($k <= date('n')-(12-date('n')+1)) {
                                            echo "<li><a href='#' id='linkMonth".($k+1)."'>".utf8_encode(substr(utf8_decode($v),0,3))."</a></li>";
                                        }                                        
                                    }

                            ?>
                            </ul>
                    </div>
                    <div class='clear'></div>
                    <?php
                        foreach($calendar as $year=>$mois) {
                            foreach ($mois as $m=>$days) {
                    ?>
                    <div data-year="<?php echo $year; ?>" id="month<?php echo $m; ?>" class="month">
                            <table>
                                    <thead>
                                            <?php
                                                    foreach($weeks as $v) {
                                                            echo "<th>".$v."</th>";
                                                    }
                                            ?>
                                    </thead>
                                    <tbody>
                                            <tr>
                                            <?php
                                                    foreach($days as $d=>$w) {
                                                            if($d==1 && $w != 0) {
                                                                    echo "<td colspan='".($w)."' class='padding'></td>";
                                                            }

                                                            if(date('Y')==$year && date('n')==$m && date('j')==$d) {
                                                                    echo "<td class='today'>$d</td>";
                                                            } else {
                                                                    echo "<td>$d</td>";
                                                            }

                                                            if($w==6) {
                                                                    echo "</tr><tr>";
                                                            }
                                                    }
                                            ?>
                                            </tr>
                                    </tbody>
                            </table>
                    </div>
                    <?php }} echo "<pre>";print_r($calendar);?>
            </body>
    </html>
Apo18
Auteur

Merci beaucoup, c'est parfait !

Apo18
Auteur

Excusez moi de vous déranger, mais dans le cas où le calendrier est généré sur un an, comment fait-on pour que 2013 remplace 2012 quand on clique sur Janvier ?

Merci d'avance,

Apo18
Auteur

Merci beaucoup,
Parcontre, ça ne marchait pas tout de suite, j'ai essayé, et j'ai trouvé qu'il fallait écrire:

$('.year').html("<p>" + $('#month'+month).data('year') + "</p>");
Apo18
Auteur

Bonsoir !!
Comment fait-on si l'on veut rajouter les numéros de semaines?
Pour l'instant, j'ai ajouté au tableau un :

$nw = date('W', $date) 
$data$y]$m]$d]$nw] = $w;

Par contre pour l'insérer dans le calendrier, faut-il faire un foreach?
Merci d'avance,

Salut,
oui il faut rajouter dans les foreach.
c'est pas parfait pour certaines dernières semaines (faut rajouter des colspans)
(au passage le '<p>' que tu avais rajouté, sans ça marche très bien chez moi..?)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
        <head>
                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <title>Calendrier</title>
                    <link rel="stylesheet" type="text/css" href="style.css" />
                    <script type="text/javascript" src='http://code.jquery.com/jquery-1.8.3.min.js'></script>
                    <script type="text/javascript">
                        jQuery(function($){
                            $('.month').hide();
                            $('#month<?php echo date('n');?>').show();
                            $('#linkMonth<?php echo date('n');?>').addClass('active');
                            var current = <?php echo date('n');?>;
                            $('.months a').click(function(){
                                var month = $(this).attr('id').replace('linkMonth','');
                                if(month != current){
                                    $('#month'+current).slideUp();
                                    $('#month'+month).slideDown();
                                    $('body>div.year').html($('#month'+month).data('year'));
                                    $('.months a').removeClass('active');
                                    $('#linkMonth'+month).addClass('active');
                                    current = month;
                                }
                                return false;
                           });
                        });
                    </script>
            </head>

            <body>
                    <?php
                            $months = array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
                            $weeks = array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
                            function getYear($time) {
                                    $r = array();
                                    $date = strtotime(date($time));
                                    //structure tbl $r[annee][mois][JOUR] = JOUR DE LA SEMAINE;
                                            while($date <= strtotime('+1 Year')) {
                                                    $y = date('Y', $date);
                                                    $m = date('n',$date);
                                                    $d = date('j',$date);
                                                    $w = date('w',$date);
                                                    $W = date('W',$date);
                                                    $r$y]$m]$d] = array('w' => $w, 'W' => $W);
                                                    $date += (24*60*60);
                                            }
                                    return $r;
                            }

                            $calendar = getYear(date('Y-m-01'));
                            $year = key($calendar);
                    ?>

                    <div class="year">
                            <?php echo $year;?>
                    </div>
                    <div class="months">
                            <ul>
                            <?php
                                    //Affichage month
                                    foreach($months as $k=>$v) {
                                        if($k >= date('n')-1) {
                                            echo "<li><a href='#' id='linkMonth".($k+1)."'>".utf8_encode(substr(utf8_decode($v),0,3))."</a></li>";
                                        }                                        
                                    }

                                   foreach($months as $k=>$v) {
                                        if($k <= date('n')-(12-date('n')+1)) {
                                            echo "<li><a href='#' id='linkMonth".($k+1)."'>".utf8_encode(substr(utf8_decode($v),0,3))."</a></li>";
                                        }                                        
                                    }

                            ?>
                            </ul>
                    </div>
                    <div class='clear'></div>
                    <?php
                        foreach($calendar as $year=>$mois) {
                            foreach ($mois as $m=>$days) {
                    ?>
                    <div data-year="<?php echo $year; ?>" id="month<?php echo $m; ?>" class="month">
                            <table>
                                    <thead>
                                            <?php
                                                    foreach($weeks as $v) {
                                                            echo "<th>".$v."</th>";
                                                    }
                                                    echo "<th>Week</th>";
                                            ?>
                                    </thead>
                                    <tbody>
                                            <tr>
                                            <?php
                                                    foreach($days as $d=>$w) {
                                                            if($d==1 && $w'w'] != 0) {
                                                                    echo "<td colspan='".($w'w'])."' class='padding'></td>";
                                                            }

                                                            if(date('Y')==$year && date('n')==$m && date('j')==$d) {
                                                                    echo "<td class='today'>$d</td>";
                                                            } else {
                                                                    echo "<td>$d</td>";
                                                            }

                                                            if($w'w']==6) {
                                                            echo "<td>".$w'W']."</td>";
                                                                    echo "</tr><tr>";
                                                            }
                                                    }
                                            ?>
                                            </tr>
                                    </tbody>
                            </table>
                    </div>
                    <?php }} echo "<pre>";print_r($calendar);?>
            </body>
    </html>