Calendrier de saisie php et javascript

Soyez le premier à donner votre avis sur cette source.

Vue 90 271 fois - Téléchargée 12 419 fois

Description

C'est un calendrier que j'ai tiré de phpMyAdmin et que j'utilise dans mes formulaires.
Pour l'utiliser, vous devez :

- nommer votre formulaire, ex : <form name="form_test">
- "nommer" et "IDer" vos champs texte, ex : <input type="text" id="id_ddn" name="ddn" />
- utiliser la fonction implémentée "create_calendar" pour créer les 3 bouttons permettants de remplir le champs texte.
Regardez l'exemple dans index.php pour mieux comprendre.

Ces fonctions sont très facilement réutilisables avec les images et les fonctions JavaScript et PHP que je vous ai donné en source.

2 fichier pour tester : test.html et test.php4

Source / Exemple :


<?php
require("req_buttons.php4");
/**

  • calendar.php4
*
  • @version 2.0
  • @copyright 2006
  • /
$t_calendar_months_full=array(1=>"Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"); $t_calendar_days_abreviate=array(1=>"Lu","Ma","Me","Je","Ve","Sa","Di"); $mois_chiffre=array(1=>"01","02","03","04","05","06","07","08","09","10","11","12"); $mois_full=$t_calendar_months_full; //$mois_abrege=array(1=>"Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc"); //$semaine_full=array(1=>"Lundi","Mardi","Mercredi","Jeudi","Venredi","Samedi","Dimanche"); $semaine_abrege=$t_calendar_days_abreviate; // Variables // mois if (isset($_POST["mois"])) {$mois_selectionne=$_POST["mois"];} else{$mois_selectionne=date("n");} // années if (isset($_POST["annee"])) {$annee_selectionne=$_POST["annee"];} else{$annee_selectionne=date("Y");} ?> <!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" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Language" content="fr" /> <meta name="Distribution" content="Private" /> <meta name="Robots" content="None" /> <meta name="Rating" content="General" /> <link rel="stylesheet" type="text/css" href="css/style.css" /> <title>Calendrier</title> <script language="JavaScript" type="text/javascript" src="js/dates.js"></script> <body> <table class="calendar"> <tr> <th width="50%"> <table border="0" align="center"> <tr> <?php if ($mois_selectionne==1) { ?> <td style="background-color: transparent;text-align: right"><form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"><input type="hidden" name="mois" value="12" /><input type="hidden" name="annee" value="<?php echo $annee_selectionne-1;?>" /><button type="submit" name="bt_month_less" title="-" class="im">«</button></form></td> <?php }else{ ?> <td style="background-color: transparent;text-align: right"><form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"><input type="hidden" name="mois" value="<?php echo ($mois_selectionne=="1") ? $mois_selectionne : $mois_selectionne-1;?>" /><input type="hidden" name="annee" value="<?php echo $annee_selectionne;?>" /><button type="submit" name="bt_month_less" title="-" class="im">«</button></form></td> <?php } ?> <td style="background-color: transparent;"> <form name="form_mois" action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"><input type="hidden" name="annee" value="<?php echo $annee_selectionne;?>" /> <select name="mois" onchange="form_mois.submit()"> <?php $i=0; foreach ($mois_full as $value){ $i++; ?> <option value="<?php echo $i;?>"<?php echo ($mois_selectionne==$i) ? (" selected=\"selected\""):("");?>><?php echo $value;?></option> <?php } ?> </select> </form> </td> <?php if ($mois_selectionne==12) {/* permettre d'augmenter d'une année vers année n+1 et mois==1 */ ?> <td style="background-color: transparent;text-align: left"><form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"><input type="hidden" name="mois" value="1" /><input type="hidden" name="annee" value="<?php echo $annee_selectionne+1;?>" /><button type="submit" name="bt_month_plus" title="+" class="im">»</button></form></td> <?php }else{ ?> <td style="background-color: transparent;text-align: left"><form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"><input type="hidden" name="mois" value="<?php echo ($mois_selectionne==12) ? $mois_selectionne : $mois_selectionne+1;?>" /><input type="hidden" name="annee" value="<?php echo $annee_selectionne;?>" /><button type="submit" name="bt_month_plus" title="+" class="im">»</button></form></td> <?php } ?> </tr> </table> </th> <th width="50%"> <table border="0" align="center"> <tr> <td style="background-color: transparent;text-align: right"><form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"><input type="hidden" name="mois" value="<?php echo $mois_selectionne;?>" /><input type="hidden" name="annee" value="<?php echo ($annee_selectionne>1920) ? $annee_selectionne-1 : $annee_selectionne;?>" /><button type="submit" name="bt_year_less" title="-" class="im">«</button></form></td> <td style="background-color: transparent;"> <form name="form_annee" action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"> <input type="hidden" name="mois" value="<?php echo $mois_selectionne;?>" /> <select name="annee" onchange="form_annee.submit()"> <?php $annee_depart = 1920; $annee_max = date("Y")+1; $j=0; for($j=$annee_max;$j>=$annee_depart;$j--){ ?> <option value="<?php echo $j;?>"<?php echo ($annee_selectionne==$j) ? (" selected=\"selected\""):("");?>><?php echo $j;?></option> <?php } ?> </select> </form> </td> <td style="background-color: transparent;text-align: left"><form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"><input type="hidden" name="mois" value="<?php echo $mois_selectionne;?>" /><input type="hidden" name="annee" value="<?php echo ($annee_selectionne<(date("Y")+1)) ? $annee_selectionne+1 : $annee_selectionne;?>" /><button type="submit" name="bt_year_plus" title="+" class="im">»</button></form></td> </tr> </table> </th> </tr> </table> <table class="calendar" align="center"> <tr> <?php $nombre_jours_mois = cal_days_in_month(CAL_GREGORIAN,$mois_selectionne,$annee_selectionne); $premier_jour_mois = jddayofweek(cal_to_jd(CAL_GREGORIAN,$mois_selectionne,1,$annee_selectionne),0); //echo $premier_jour_mois; $premier_jour_mois = ($premier_jour_mois==0)? 7 : ($premier_jour_mois); foreach ($semaine_abrege as $value){ ?> <th><?php echo $value; ?></th> <?php } ?> </tr> <?php $num_col=0; $bg=0; for($k=-$premier_jour_mois+2;$k<=$nombre_jours_mois;$k++){ if ($num_col==0) { $tdbg=(($bg%2)==0)?"two":"one";?> <tr> <?php } if ($mois_selectionne<10) {$mois_aff=$mois_chiffre[$mois_selectionne];} else{$mois_aff=$mois_selectionne;} if ($k<10) {$jour_aff="0".$k;} else{$jour_aff=$k;} if (($k>=$premier_jour_mois) AND ($k<=$nombre_jours_mois)) { echo ($k==date("j"))?("\t\t<td class=\"selected\"><a href=\"javascript:returnDate('$jour_aff/$mois_aff/$annee_selectionne')\">$jour_aff</a></td>\n"):("\t\t<td class=\"$tdbg\"><a href=\"javascript:returnDate('$jour_aff/$mois_aff/$annee_selectionne')\">$jour_aff</a></td>\n"); } else{ if ($k<$premier_jour_mois AND $k>0) { echo "\t\t<td class=\"$tdbg\"><a href=\"javascript:returnDate('$jour_aff/$mois_aff/$annee_selectionne')\">$jour_aff</a></td>\n"; } else{ echo "\t\t<td class=\"$tdbg\">&nbsp;</td>\n"; } } if ($num_col==6) {echo "\t</tr>\n\t\t";} $num_col=($num_col+1)%7; $bg++; } ?> <tr> <td colspan="7"><?php buttons("close");?></td> </tr> </table> <br /> </body> </html>

Conclusion :


Fonctionne avec IE et FireFox
Inspiré de phpMyAdmin

Permet d'inscrire une date depuis un calendrier au format :
JJ-MM-AAA
ou si vous préférez
DD-MM-YYYY

Utilise JavaScript et CSS pour la mise en forme.
D'autres fonctions sont disponibles dans "req_calendrier" pour pouvoir avec la date de la fin du mois par exemple.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30 -
salut
ton code est bien documenté, et a l'air sympas, quelques petites remarques : dans req_calendrier.php, tu ne ferme pas ta balise php à la fin.
tu utilises des " comme des ' alors que les ' sont beaucoups plus rapides (sans changer ton code, juste en remplaçant tes " par des ', ton code serait optimisé... franchement, comme t'as pas beaucoups de modifications, ça vaut le coups...)
t'as quelques lignes de codes inutiles : dans req_bouttons.php
default:
break;
Bon, à part ça, ça a l'air pas mal
Bonne continuation
J_G
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
6 -
Marche pas...

L'idée est bonne pourtant ! Et ça fesait un moment que j'avais envie d'un calendrier... mais ce ne sera vraissemblablement pas celui-ci

1. Pour ceux qui utilise linux est qui n'ont pas compilé PHP avec --enable-calendar (et qui n'ont pas envi de ce le taper aujourd'hui)
Voici un petit patch rapide à mettre en haut de calendrier.php :
-----------------------------
if( !defined('CAL_GREGORIAN') ) define('CAL_GREGORIAN', 0);
if( !function_exists('cal_days_in_month') ) {
function cal_days_in_month($no, $month, $year) {
return date('t', mktime(0, 0, 0, 12, $month, $year));
}
}
if( !function_exists('jddayofweek') ) {
function jddayofweek($day, $no) {
return date('w'); // You can also specify a date
}
}
if( !function_exists('cal_to_jd') ) {
function cal_to_jd($no, $month, $day, $year) {
return date('z'); // You can also specify a date
}
}
-----------------------------------


2. Ensuite, le défilements des jours ne fonctionne pas avec mon FF (quand on change de mois ou d'année)... C'est un proiblème de JS, et là j'ai cracké...


3. Pourquoi ça ?
$mois_chiffre=array(1=>"01","02","03","04","05","06","07","08","09","10","11","12");
$mois_full=array(1=>"Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
//$mois_abrege=array(1=>"Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc");
//$semaine_full=array(1=>"Lundi","Mardi","Mercredi","Jeudi","Venredi","Samedi","Dimanche");
$semaine_abrege=array(1=>"Lu","Ma","Me","Je","Ve","Sa","Di");

Alors que ça :
set_local(LC_ALL, 'fr');
et strftime( X , mktime(,,,,));


4. Pourquoi les fonctions de calendrier qui sont destinées à convertir les calendriere entre eux ? Regarde mon patch... la fonction date, et strftime font très bien se que tu demandes à cal_...


5. Bien commenté !?!@#'\)('m,à"tr'"mojzkg)àj'"p ???

Des choses à revoir selon moi...
A+
djroulo
Messages postés
25
Date d'inscription
dimanche 22 février 2004
Statut
Membre
Dernière intervention
21 octobre 2008
-
Le calendrier gregorien date de 1582 et c'est celui que nous utilisons aujourd'hui.
Le calendrier julien me permet de calculer le numéro du jour de la semaine 1 soit le premier jour du mois que je calcule à la volée, par exemple : jour 1 du mois 4 est un Mercredi.

1 - La plupart des compilations de PHP incluent par défaut --enable-calendar
2 - Si ta version de PHP n'a pas l'option --enable-calendar activée, tu risque de ne pas pouvoir utiliser correctement le défilement de ces différentes fonctions...
3 - Pour l'affichage en Français. Les dates avec des zéros exemple : 2005-08-04 pour le 4 aout 2005.
Je ne connaissais pas set_local(LC_ALL,'fr'); mais si ça marche je te propose de nous le montrer, avec plaisir j'attends ta source préviens moi...
4 - Je n'utilise pas strftime car justement je calcule la date dans le format de mysql c'est-à-dire
'YYYY-MM-DD'
5 - Je vais rajouter des commentaires pour toi c'est promis je reverrai ma version je ferai une mise à jour.
J_G
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
6 -
Puisque tu me le demande...
Voici ce que je met dans mon fichier de configuration :



setlocale(LC_ALL,'fr','FR','FR_fr'); // LC_ALL => tout est en format français, tu eux limiter à LC_TIME pour les dates
// 'fr','FR','FR_fr' => PHP essaye ces différents format dans l'ordre... par exemple, pour un site québécois : 'CA_fr','fr','FR','FR_fr'
define('DATEISO','%Y-%m-%d %T'); // format MySQL : 2000-01-02 13:33:45
define('DATEFR_XL','%A, %e %B %Y à %R'); // format très long lundi, 2 janvier 2000 à 23:33:45
define('DATEFR_L','%A, %e %B %Y'); // format long : lundi, 2 janvier 2000
define('DATEFR','%e %B %Y'); // format classique : 2 janvier 2000
define('DATEFR_S','%a %e %b %y'); // format court : lun 2 jan 2000
define('DATEFR_XS',%d/%m/%y); // format très court : 02/01/00


Ensuite, il te suffit de faire :
echo strftime(DATEFR_XL, time());
pour avoir l'heure actuelle en format très long...


Autre chose, tu peux facilement faire l'opération inverse (SOUS PHP5) :
$str_time = strftime(DATEFR_XL, time());
$arr_time = strptime(DATEFR_XL, $str_time);
print_r($arr_time);
Array
(
[tm_sec] => 19
[tm_min] => 54
[tm_hour] => 15
[tm_mday] => 3
[tm_mon] => 9
[tm_year] => 104
[tm_wday] => 0
[tm_yday] => 276
[unparsed] => // ici, il y'aura tout ce que la fonction n'a pas compris
)

Sans PHP5, il y'a strtotime($str_time); mais cette fonction ne comprend pas le français... Donc à n'utiliser qu'avec les DATEISO (dates sorties de MySQL)


Voilà pour strftime... qui est bien mieux que date car parle français. Bien sur, je ne conseil que trop d'aller voir sur fr.php.net la notice d'tilisation de ces fonctions.

Après, tu as raison pour le calendrier Julien. Mais comme je fais des logiciel de gestion, je n'ai jamais eu à remonter jusqu'à JC... Mais bien sûr, pour le plaisir intellectuel, il est intéressant de savoir que son calendrier vaut pour toute l'air chrétienne.



Ne prends pas la mouche avec mon dernier message. (désol' si j'ai été un peu trop virulant). Par décéption, je me suis lancé dans mon propre calendrier... En Javascript/HTML uniquement.

J'en suis aux finitions. Si tu veux, je te filerais la source.

A+
cs_EagleEye
Messages postés
17
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
8 janvier 2006
-
Un calendrier ? Tiens interessant :)
Beau boulot :)

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.