Calendrier php sur une durée definie à partir de la date système

Soyez le premier à donner votre avis sur cette source.

Vue 12 216 fois - Téléchargée 957 fois

Description

Voici un petit calendrier, qui génére 12 mois en php et qui retourne la date dans un input au format Y-m-d (pour insertion dans une base SQL).
Le calendrier est en interaction direct avec un input (il s'affiche sur l'input et retourne la valeur a l'input en question).
L'utilisation est tres simple et est expliquée dans le code.

Pour modifier le nombre de mois changer la variable '$nbmois'.

(Graphisme basic à modifier en CSS, si qqun veut me poster une nouvelle mise en forme du calendrier je suis preneur :) )

Source / Exemple :


<?php
/*
Pour Utilisation du calendrier il suffit de mettre dans la page concernée
include "./calendrier.php";
et mettre aux inputs consernés l'attribut onclick suivant:
    onclick="javascript:affcalendrier(this);"

  • /
?> <style> .calendrier { position: absolute; z-index: 20; width:75px; height:50px; display:none; background: #99FF66; } </style> <?php function moisFr($mois,$annee) { $affmois=date("M",mktime(0,0,0,$mois,1,$annee)); switch($affmois) { case "Feb": return " Fev ";break; case "Apr": return " Avr ";break; case "May": return " Mai ";break; case "Jun": return " Juin ";break; case "Jul": return " Juil ";break; case "Aug": return " Aout ";break; default : return $affmois;break; } } $nbmois=12; //on ne va afficher que 12mois(periode scolaire max $mois=date("m"); $annee=date("Y"); echo "<script> var mois=".intval($mois).";</script>"; $lmois=array(); $lannee=array(); for($i=0;$i<$nbmois;$i++) { $lmois[]=$mois + $i; $moisC=($mois + $i)%13; if($moisC==0) { $lmois[strlen($lmois) - 1]=1; $moisC=1; $annee++; } $lannee[]=$annee; echo "<div id='calen".$moisC."' class='calendrier' >"; echo "<select name='lmois' onchange='javascript:changecalendrier(this);' >"; for($s=0;$s<12;$s++) { $option=$mois + $s; $optionannee=$annee; if($option>12) { $option=$option - 12; $optionannee=$annee + 1; } if($option==$moisC) { echo "<option value=".$option." selected='selected'>".moisFr($option,$optionannee)."</option>"; } else { echo "<option value=".$option." >".moisFr($option,$optionannee)."</option>"; } } echo "</select>".$annee; ?> <table border='2px' > <tr> <td>Lun</td> <td>Mar</td> <td>Mer</td> <td>Jeu</td> <td>Ven</td> <td>Sam</td> <td>Dim</td> </tr> <?php $nbjour=date("t",mktime(0,0,0,$moisC,1,$annee)); for($jour=1;$jour<=$nbjour;$jour++) { $statue=date("w",mktime(0,0,0,$moisC,$jour,$annee)); if($jour==1) { $NCZ=($statue + 6)%7;//nombre de colonne zappé a partir de la gauche if($NCZ!=0) { echo "<tr><td>"; for($k=0;$k<($NCZ - 1);$k++) echo "</td><td>"; } } if($statue==1) { echo "<tr><td>"; } else { echo "</td><td>"; } $journee=date("Y-m-d",mktime(0,0,0,$moisC,$jour,$annee)); ?> <a href="javascript:affecte('<?= $journee ?>');" ><?= $jour ?></a> <?php if($statue==0) echo "</td></tr>"; $NCZ=(7 - $statue)%7;//nombre de colonne zappé a partir de la droite if($statue!=0&&$jour==$nbjour) { for($k=0;$k<$NCZ;$k++) echo "</td><td>"; echo "</td></tr>"; } } echo "</table></div>"; } ?> <script type="text/javascript" > var courant; function affcalendrier(input) { var Y = input.eventY; var X = input.eventX; for(var i=1;i<13;i++) { if(document.getElementById) document.getElementById("calen" + i).style.display="none"; else document.all["calen" + i].style.display="none"; } if(document.getElementById) var calendrierC=document.getElementById("calen" + mois); else var calendrierC=document.all["calen" + mois]; calendrierC.style.position.left=X; calendrierC.style.position.top=Y; calendrierC.style.display="block"; courant=input; } function changecalendrier(valeur) { var MoisC=valeur.value; var Y = courant.eventY; var X = courant.eventX; for(var i=1;i<13;i++) { if(document.getElementById) document.getElementById("calen" + i).style.display="none"; else document.all["calen" + i].style.display="none"; } if(document.getElementById) { var calendrierC=document.getElementById("calen" + MoisC); } else { var calendrierC=document.all["calen" + MoisC]; } calendrierC.style.position.left=X; calendrierC.style.position.top=Y; calendrierC.style.display="block"; for(var i=0;i<12;i++) document.getElementsByName("lmois")[i].value=MoisC; } function affecte(journee) { if(document.getElementsByName) var input=document.getElementsByName(courant.name); else var input=document.all[courant.name]; courant.value=journee; for(var i=1;i<13;i++) { if(document.getElementById) document.getElementById("calen" + i).style.display="none"; else document.all["calen" + i].style.display="none"; } for(var i=0;i<12;i++) document.getElementsByName("lmois")[i].value=mois; } </script>

Conclusion :


Je n'ai pas testé si la méthode : getElementsByName marche sur firefox, si vous rencontrez des problème d'utilisation n'exitée pas à les préciser.

Bonne utilisation

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
4
Date d'inscription
samedi 17 septembre 2005
Statut
Membre
Dernière intervention
27 février 2008

En fait tu voudrais que le calendrier s'affiche dans un div predefini par l'utilisateur ?
Si c'est le cas ce n'ai pas ce que je recherche il faut juste que je récuperes les coordonnées de l'input sous firefox...
Messages postés
70
Date d'inscription
jeudi 14 avril 2005
Statut
Membre
Dernière intervention
20 août 2008

Je te répond sans toute fois avoir tester mais un
sous l'input concerné ne résoudrait pas ton problème ?
Messages postés
4
Date d'inscription
samedi 17 septembre 2005
Statut
Membre
Dernière intervention
27 février 2008

Je viens de remarquer un petit probleme sur firefox : le calendrier ne s'affiche pas au coordonnées de l'input, quelqu'un aurait-il une solution javascript ?
Messages postés
4
Date d'inscription
samedi 17 septembre 2005
Statut
Membre
Dernière intervention
27 février 2008

Oki, je change cela quand le serveur free voudra bien se remettre en activité ...
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
En fait je te conseillerai de sortir d'un langage quand tu utilise un autre langage, histoire de propreté, meme si parfois ca alourdi le code, tu aura un gain de performance en fermant les tags :)
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.