Calendrier en PHP
Résolu
Fetide68
Messages postés
745
Date d'inscription
Statut
Membre
Dernière intervention
-
Fetide68 Messages postés 745 Date d'inscription Statut Membre Dernière intervention -
Fetide68 Messages postés 745 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'essaie de faire tout seul un calendrier en PHP !
Un seul détail ne fonctionne pas, chaque mois commence un lundi comme ceci pour janvier:
L M M J V S D
1 2 3
4 5 6 7 8 9 10...
Le 4 est bien un lundi mais le premier, est un vendredi... J'essaie de trouver une condition pour afficher '<td> </td>' si le jour ne correspond pas mais je ne vois pas... :
Voici mon code :
Merci !
J'essaie de faire tout seul un calendrier en PHP !
Un seul détail ne fonctionne pas, chaque mois commence un lundi comme ceci pour janvier:
L M M J V S D
1 2 3
4 5 6 7 8 9 10...
Le 4 est bien un lundi mais le premier, est un vendredi... J'essaie de trouver une condition pour afficher '<td> </td>' si le jour ne correspond pas mais je ne vois pas... :
Voici mon code :
<span class="location"> <form method="post" id="dates"> <select name="mois" id="mois" onchange="document.getElementById('dates').submit();"> <?php $mois = array ('','Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'); $jours = array ('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'); $selected_month = Securite::bdd($_POST['mois']); for ($mm=1;$mm<=12;$mm++) { if ($mm != $selected_month) { echo '<option value="'.$mm.'">'.$mois[$mm].'</option>'; } else { echo '<option value="'.$mm.'" selected>'.$mois[$mm].'</option>'; } } ?> </select> <select name="annee" id="annee" onchange="document.getElementById('dates_foyer').submit();"> <?php $annee_courante = date('Y',time()); $annee_suivante = date('Y',time())+1; $selected_year = Securite::bdd($_POST['annee']); if ($selected_year == $annee_suivante) { echo '<option value="'.$annee_courante.'">'.$annee_courante.'</option>'; echo '<option value="'.$annee_suivante.'" selected>'.$annee_suivante.'</option>'; } else { $selected_year = date('Y',time()); echo '<option value="'.$annee_courante.'" selected>'.$annee_courante.'</option>'; echo '<option value="'.$annee_suivante.'">'.$annee_suivante.'</option>'; } ?> </select> </form> </span> <?php if ($selected_month != '' && $selected_year != '') { $month = $selected_month; $year = $selected_year; echo $mois[$month].' '.$year; } else { $month = date ('n',time()); $year = date ('Y',time()); echo $mois[$month].' '.$year; } // date choisie en timestamp $selected_date = strtotime('01-'.$month.'-'.$year); // nombre de jour pour le mois et de l'année choisie $nombre_de_jour = date ('t',$selected_date); echo '<br><br>'; echo '<br><br>'; echo '<table class="calendrier" style="margin: auto; width: 420px;">'; echo '<tr class="entete"><td>L</td><td>M</td><td>M</td><td>J</td><td>V</td><td class="weekend">S</td><td class="weekend">D</td></tr>'; for ($day=1; $day<=$nombre_de_jour; $day++) { $date_du_day = strtotime($day.'-'.$month.'-'.$year); $jours_semaine = Array("0", "1", "2", "3", "4", "5", "6", "0"); $jour_de_la_semaine = date('w',$date_du_day); if ($jour_de_la_semaine==1) { echo '<tr>'; } echo '<td>'.$day.'</td>'; if ($jour_de_la_semaine==0) { echo '</tr>'; } } echo '</table>'; ?>
Merci !
A voir également:
- Calendrier php mysql
- Mon calendrier - Télécharger - Santé & Bien-être
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- Calendrier partagé google - Guide
- Synchroniser calendrier outlook et gmail - Guide
- Easy php - Télécharger - Divers Web & Internet
10 réponses
d'abord je pensais me rappeler que dans les listes déroulantes, l'attribut par défaut se notait selected="selected"
ensuite dans $jour[] je vois que dimanche est en première position alors qu'il est affiché en dernier
Sinon plus concretement pour ton problème de décalage, je vais donner mon avis perso:
t'as déjà réussi un joli coup: il t'écris pas toute la semaine entière, donc quand tu lui demandes un nouveau mois, tu dois le faire se décaler de n cases ... je vois sa ainsi:
Voilà ce que j'en penses. J'ai rajouté le code entre les "XXX" qui permet d'ajouter autant de "<td/>" (saut de case) que de jours déjà passés dans la semaine, et je modifie la boucle juste après pour qu'elle commence au 2e jour
ensuite dans $jour[] je vois que dimanche est en première position alors qu'il est affiché en dernier
Sinon plus concretement pour ton problème de décalage, je vais donner mon avis perso:
t'as déjà réussi un joli coup: il t'écris pas toute la semaine entière, donc quand tu lui demandes un nouveau mois, tu dois le faire se décaler de n cases ... je vois sa ainsi:
echo '<table class="calendrier" style="margin: auto; width: 420px;">'; echo '<tr class="entete"><td>L</td><td>M</td><td>M</td><td>J</td><td>V</td><td class="weekend">S</td><td class="weekend">D</td></tr>'; XXXXX $initiation_mois = strtotime('01-'.$month.'-'.$year); $jour_de_la_semaine = date('w',$date_du_day); $j=""; for($i=1; $i<=date('N',$jour_de_la_semaine);$i++) $j= $j."<td/>" XXXXXXX for ($day=2; $day<=$nombre_de_jour; $day++) { $date_du_day = strtotime($day.'-'.$month.'-'.$year); $jours_semaine = Array("0", "1", "2", "3", "4", "5", "6", "0"); $jour_de_la_semaine = date('w',$date_du_day); if ($jour_de_la_semaine==1) { echo '<tr>'; } echo '<td>'.$day.'</td>'; if ($jour_de_la_semaine==0) { echo '</tr>';
Voilà ce que j'en penses. J'ai rajouté le code entre les "XXX" qui permet d'ajouter autant de "<td/>" (saut de case) que de jours déjà passés dans la semaine, et je modifie la boucle juste après pour qu'elle commence au 2e jour
Je comprends un peu ton code que j'ai adapté pour l'insérer au bon endroit (brut, il ne fonctionne pas bien: ça me met tout en ligne):
Juste avant echo '<td>'.$day.'</td>' j'ai fait ça :
Mais ca me décale tout le tableau. Toutes les semaines un vendredi tous les mois...
Juste avant echo '<td>'.$day.'</td>' j'ai fait ça :
for ($i=1; $i<=date('N',$jour_de_la_semaine);$i++) echo "<td/>";
Mais ca me décale tout le tableau. Toutes les semaines un vendredi tous les mois...
non non je pense qu'on s'est mal compris: mon bout de code détermine quel est le 1er jour du mois sous forme numérique (lundi = 1; mardi = 2; ...) et passes autant de cases grace à <td/> (qui remplace une case vide <td></td>) mais cela doit etre fait une seule fois, avant la génération du calendrier complet (hors boucle for)
Oups, haaaa ! je me suis planté dans mon code et en effet je t'ai filé un truc qui ... fait rien du tout, alors jai fait une petite boucle for qui stocke une chaine dans $j sans l'utiliser, hop hop hop sa ne va pas, voilà en effet ce que j'aurais du mettre:
XXXXX
$initiation_mois = strtotime('01-'.$month.'-'.$year);
$jour_de_la_semaine = date('w',$date_du_day);
$j="";
for($i=1; $i<=date('N',$jour_de_la_semaine);$i++) echo "<td/>";
XXXXXXX
XXXXX
$initiation_mois = strtotime('01-'.$month.'-'.$year);
$jour_de_la_semaine = date('w',$date_du_day);
$j="";
for($i=1; $i<=date('N',$jour_de_la_semaine);$i++) echo "<td/>";
XXXXXXX
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question