Fonction calendrier

Contenu du snippet

Une fonction qui retourne un calendrier en fonction d'une date passée en paramètre au format suivant 24/11/2003

Source / Exemple :


Contenu de cal.asp

<%
'Fonction qui retourne la date avec le format suivant 20-Fevrier-2003
'--------------------------------------------------------------------
Function MediumDate(MaDate)
	
		'Déclaration des variables
		'-------------------------
		Dim dayPart, monthPart, yearPart, MonthLib
		
		'Liste des racourssis des mois dans l'ordre 
		'------------------------------------------
		MonthLib = array ("","Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre")
		
		'Test de la validité de la date
		'------------------------------
		If IsDate(MaDate) Then		
			dayPart   = Day(MaDate) 'Je récup le num du jour
			monthPart = MonthLib(Month( MaDate ))'Je récup le num du mois
			yearPart  = Year( MaDate )'Je récup le num de l'annee		
			MediumDate = dayPart & " " & monthPart & " " & yearPart 'Conténation	
		Else		
			MediumDate = " "		
		End If    
		
	End Function

'Retourne le calendrier du mois courant de la date passée en parametre
'---------------------------------------------------------------------
Function Calendrier(DateDuJour)
	
	'Control sur la validité de la date (la date passée en parametre 
        'doit etre valide sinon on retourne la date d'aujurd'hui
	'---------------------------------------------------------------
	If IsDate(DateDuJour)=true then
		Response.write ""
	Else
		DateDuJour = Date()
	End if
	
		'Decomposition de la date en variables utiles
		'---------------------------------------------
	    jour			= day(DateDuJour)					'numero du jour
		jour_semaine	= weekdayname(weekday(DateDuJour))	'nom du jour de la semaine
		NumSemaine		= DatePart("ww",DateDuJour)			'numero de la semaine
		mois			= month(DateDuJour)					'numero du mois
	    an				= year(DateDuJour)					'numero de l'année

		' valeur issue de l'addition ou soustraction du mois du jour en cours
		'--------------------------------------------------------------------
		MoisSuivant 	= DateAdd("m",1,DateDuJour)
		MoisPrecedent 	= DateAdd("m",-1,DateDuJour)
		AfficheDate 	= MediumDate(DateDuJour)'/!\Appel a la fonction MediumDate/!	
		'Date du 1er du mois du jour demandé
		'-----------------------------------
		DateDebut = DateSerial(an,mois,1)

		'je fais une boucle sur la première semaine et je recherche le lundi
		'-------------------------------------------------------------------
		for b = DateDebut to DateAdd("d",7,DateDebut)
			'lorsque je tombe sur le lundi de la premiere semaine je le recupere
			'-------------------------------------------------------------------
			if DatePart("w",b)= 2 then
			LeLundi = b
			End if
		
		next
		
		'Prémier jour du calendrier
		'--------------------------
		PremierDuCal = DateAdd("d",-7,LeLundi)
		
		'Date du Prémier jour du calendrier plus 34 jours
		'------------------------------------------------
		Lundi34 = DateAdd("d",34,PremierDuCal)
                'je rajoute 34jours pour avoir quelques jours du mois suivant
		
		'Je recupere le numero de semaine pour l'affichage
		'-------------------------------------------------
		NumSemaine = DatePart("ww",DateDuJour)
		NumSemaine = "Semaine n°: " & NumSemaine
		
		'Boucle générale du tablo calendrier pour générer les cellules
		'-------------------------------------------------------------
		for i = PremierDuCal to Lundi34
			
			'Si mon compteur est dans les jours du mois démandé j'attribue les bonnes css
			'----------------------------------------------------------------------------
			if (i >= DateDebut and i < DateSerial(an,mois+1,1)) then
					classe = "joursMois"
					'Je definit quel est le jour selectionné pour le mettre en surbrillance
					'----------------------------------------------------------------------
					if DatePart("d",i)=DatePart("d",DateDuJour) then
					 classe = "JourSelec"					 					 
					end if
				else
					classe = "autreMois"					
			end if
						
			'Si j'arrive au dimanche je change de ligne, sinon je continue a faire des cellules
			'----------------------------------------------------------------------------------		
			if  DatePart("w",i)= 1 then			
					cellule = cellule&"<td align=""center"" class="""&classe&"""><a href=""cal.asp?date_agenda="&i&"""  class="""&classe&""">"&DatePart("d",i)&"</a></td></tr><tr>"
				else			
					cellule = cellule&"<td align=""center"" class="""&classe&"""><a href=""cal.asp?date_agenda="&i&"""  class="""&classe&""">"&DatePart("d",i)&"</a></td>"
			end if
			
		next
		
		'Variable de debut de tablo
		'--------------------------		
		tablo1 		="<table border=""0"" width=""154"" align=""center"" class=""Calendrier"">"_
					&"<tr><td><a href=""cal.asp?date_agenda="&MoisPrecedent&""" class=""changeMois""><b><<</b></a></td><td colspan=""5"" align=""center"">"&AfficheDate&"</td><td><a href=""cal.asp?date_agenda="&MoisSuivant&""" class=""changeMois""><b>>></b></a></td></tr>"_
					&"<tr><td colspan=""7"" align=""center"">"&NumSemaine&"</td></tr>"_
					&"  <tr bgcolor=""#e0e0e0"">"_
					&"    <td width=""22"" align=""center"" class=""JoursSemaine"">L</td>"_
					&"    <td width=""22"" align=""center"" class=""JoursSemaine"">M</td>"_
					&"    <td width=""22"" align=""center"" class=""JoursSemaine"">M</td>"_
					&"    <td width=""22"" align=""center"" class=""JoursSemaine"">J</td>"_
					&"    <td width=""22"" align=""center"" class=""JoursSemaine"">V</td>"_
					&"    <td width=""22"" align=""center"" class=""JoursSemaine"">S</td>"_
					&"    <td width=""22"" align=""center"" class=""JoursSemaine"">D</td>"_
					&"  </tr>"
		
		'Variable de fin de tablo
		'------------------------			
		FinTablo1 = "</tr></table>"
			
	'Retour de ma fonction
	'---------------------
	Calendrier = tablo1 & cellule & FinTablo1
	
End Function

'Affichage
'---------
response.write Calendrier("24/11/2003")
%>

Contenu de calendrier.css

/*                             Feuille de style du calendrier                             */

/*Corps de la page du calendrier*/
body {
font-family: Arial, Helvetica, sans-serif; font-size: 11px;
color:black;background-color: #e5e5e5;
text-decoration: none;
}

/*Aspect du tablo du calendrier*/
.Calendrier {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 11px;
	border: 1px solid #cccccc;
	background-color: #ffffff;
	text-decoration: none;
}

/*Aspect des jours de la semaine [L, M, M, J, V, S, D]*/
.JoursSemaine {
	font-family: Arial, Helvetica, sans-serif;
	padding-left: 2px;
	padding-right: 2px;
	padding-top: 2px; 
	padding-bottom: 2px;
	color: #ffffff;
	font-size: 10px;
	font-size: x-small;
	font-weight:bold;
	background-color: #c0c0c0;
	text-decoration: none;
}

/*Lien pour changer vers mois suivant ou précédent*/
.changeMois {
font-family: Arial, Helvetica, sans-serif;
font-size: 13px;
color: #c0c0c0;
text-decoration: none;
}

/*Aspect du jour séléctionné*/
.JourSelec {
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
border-color: #C0c0c0;
background-color: #B661A5;
color: #ffffff;
text-decoration: none;
}

/*Aspect des jours du mois en cours*/
.joursMois {
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
color: #000000;
text-decoration: none;
}

/*Aspect des jours en dehors du mois en cours*/
.autreMois {
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
color: #c0c0c0;
background-color: #F2F3FA;
text-decoration: none;
}
.Form {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 11px;
	border: 1px solid #CCCCCC;
}

Conclusion :


Elle peut sans aucun doute être optimisée. A savoir qu'elle fait appel a une autre fonction et se sert de css pour l'affichage.
L'appel au fichier css sera a faire dans l'entête de votre page.
Les css servent a faire la différence des jours de début et fin de mois, et bien sur a rendre joli votre calendrier ;)
Sans avoir la pretention de dire que c'est une sorte de contrôle calendar sans .net j'espere qu'elle vous sera utile...

A voir également

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.