8791 sujets

Développement web côté serveur, CMS

Bonsoir à tous !


J'ai fais un script php pour afficher un calendrier, il fonctionne.

Mais lorsque je me lance tout seul dans ce genre de "projet" il m'arrive de faire des choses en php qui me paraissent logiques, mais qui je pense, peuvent se faire d'une autre manière beaucoup plus simple et/ou plus logique.

Par exemple dans une boucle qui affiche un tableau, pour indiquer de passer à la ligne suivante etc...

Bref, c'est pour cela que je vous demande comment je peux améliorer mon code pour qu'il soit plus clair, et plus logique, mais sans modifier tout le processus de base du calendrier...

Voilà le code :


<?php

$annee = 2011; //année du calendrier
$date = mktime(0, 0, 0, 1, 1, $annee); //timestamp au 1er janvier de l'année voulue

$jour = array('', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche');
$mois = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');

$mois_chiffre = 0;


echo "<h1>".$annee."</h1>";

	while (date('Y', $date) <= $annee) //tant que l'année du timpstamp (du 1er janvier de cette année) est inférieure ou égale à cette année on boucle, dans la boucle on incrémente de 1 jour, le timestamp
	{
		$annee = date('Y', $date); //l'année du timestamp
		$jour_chiffre = date('j', $date); //le jour du timestamp (1, 2, ... 31)
		$jour_nom = str_replace('0', '7' ,date('w' ,$date)); //le jour du timestamp ( 1, 2 ... 7 avec 1 = lundi....)

				// - 1 - Permet de laisser des cases vides au début du mois pour les jours non occupés
				if ($jour_nom != 1)
				{
					$cases_vides = "<td colspan='".($jour_nom - 1)."'></td>";
				}
				else
				{
					$cases_vides = "";
				}
				// - 1 --
				
				
				// - 2 - Quand on arrive à dimanche on ferme la ligne et on ouvre la suivante
				if ($jour_nom == 7)
				{
					$changer_semaine = "
						</tr> 
						
						<tr>";
				}
				else
				{
					$changer_semaine = "";
				}
				// - 2 --
		
		
		// - 3 - On affiche le calendrier
		if ($mois_chiffre != date('n', $date)) //Si on change de mois...
		{
			$mois_chiffre = date('n', $date);
			
					
					// - 4 - Pour janvier on ferme pas tout de suite la table et ni tr, pour les autres mois oui vu qu'il y a toujours un autre mois avant.
					if ($mois_chiffre != 1)
					{
						$table_fin = "</table>";
						$tr_fin = "</tr>";
					}
					else
					{
						$table_fin = "";
						$tr_fin = "";
					}
					// - 4 --
					
			
			echo "
			".$tr_fin."
			".$table_fin."
			<h2>".$mois[$mois_chiffre]."</h2>
			<table>
				<tr>
					<th>Lundi</th>
					<th>Mardi</th>
					<th>Mercredi</th>
					<th>Jeudi</th>
					<th>Vendredi</th>
					<th>Samedi</th>
					<th>Dimanche</th>
				</tr>
				
				<tr>
				
				".$cases_vides."<td>".$jour_chiffre." - ".$jour[$jour_nom]."</td>".$changer_semaine.""; //... l'affiche
		}
		else //...si on ne change pas de mois...
		{
					// - 4 - Pour janvier on ferme pas tout de suite la table et ni tr, pour les autres mois oui vu qu'il y a toujours un autre mois avant.
					if ($mois_chiffre != 1)
					{
						$table_fin = "</table>";
						$tr_fin = "</tr>";
					}
					else
					{
						$table_fin = "";
						$tr_fin = "";
					}
					// - 4 --
			
			echo "<td>".$jour_chiffre." - ".$jour[$jour_nom]."</td>".$changer_semaine.""; //...on ne l'affiche pas
		}
		// - 3 --

		$date = $date + 86400; //on rajoute le nombre de seconde équivalent à 1 jour, au timestamp

	}


?>

			</tr> <!-- On ferme la dernière ligne du mois de décembre -->
			</table> <!-- On ferme la table du mois de décembre -->



Merci à vous !
Modifié par Crousti2 (21 Dec 2011 - 22:35)
Ben déjà choisir les timestamps pour gérer un calendrier, tu sais pas dans quoi tu t'embarques. C'est pas fait pour.

Il y a la classe datetime qui est faite exprès pour ça.

Par exemple : comment tu fais +1 mois avec timestamp ? Ou simplement + x jours ? Ou si ton calendrier doit être utilisé un jour pour gérer des dates historiques d'avant 1970, ça sera juste pas possible, etc.
Modifié par jb_gfx (22 Dec 2011 - 08:36)
Coucou, d'accord avec jb_gfx et selon moi, ton approche n'est pas la bonne.
Quel est le but de ton calendrier? je pense qu'il faut commencer par là, ex: afficher des évènements sur un site, proposer une application calendrier pour les utilisateurs...
Comme dit précédemment, il y a tout un panel de fonctions pour manipuler les dates et les afficher en français.

Par exemple :
setlocale (LC_TIME, 'fr_FR.utf8','fra');
echo (strftime("%A %d %B"));
Pour afficher la date du jour.

Ensuite, partant du 1ier janvier, il suffit de d'incrémenter les jours et de traduire le résultat en jour, semaine, mois, etc.
Modifié par ericvoilier (12 Jan 2012 - 02:46)