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...
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.