Può essere utile inserire in una pagina un calendario che, legato ad
altre funzioni VBScript, potrà essere esteso per applicazioni come un'agenda
o una bolla cartolina via WEB ecc.
Partiamo con il definire che giorno della settimana è il primo del mese
corrente. Per farlo basta usare:
primodelmese="01/" & month(date()) & "/" &
year(date())
giornodellaset=WeekDay(primodelmese)
L'obbiettivo è quello di avere una tabella di una riga e 7 colonne:
se il primo del mese è di Domenica, il giorno 1 sarà nella prima
cella, se è di Lunedì, nella seconda, e così a seguire.
Per farlo, si costruisce un ciclo che genera celle vuote finchè non
stampa i giorni in corrispondenza al giorno della settimana cui corrispondono.
<HTML>
<HEAD> <TITLE>Esercizio 2</TITLE>
</HEAD>
<BODY>
<table border=1>
<tr>
<SCRIPT LANGUAGE=vbscript>
<!--
primodelmese="01/" & month(date()) & "/" & year(date())
giornodellaset=WeekDay(primodelmese)
for i=1 to giornodellaset-1
document.write ("<td> </td>")
next
giorno=1
for i=giornodellaset to 7
document.write ("<td>" & giorno & "</td>")
giorno=giorno+1
next
//-->
</SCRIPT>
</tr>
</table>
</BODY>
</HTML>
Passiamo alle righe successive. La variabile giorno indica il giorno a cui
siamo arrivati, non ci resta che compiere lo stesso ciclo in una nuova riga.
<HTML>
<HEAD> <TITLE>Esercizio 2</TITLE>
</HEAD>
<BODY>
<table border=1>
<tr>
<SCRIPT LANGUAGE=vbscript>
<!--
primodelmese="01/" & month(date()) & "/" & year(date())
giornodellaset=WeekDay(primodelmese)
for i=1 to giornodellaset-1
document.write ("<td> </td>")
next
giorno=1
for i=giornodellaset to 7
document.write ("<td>" & giorno & "</td>")
giorno=giorno+1
next
//-->
</SCRIPT>
</tr>
</table>
</BODY>
</HTML>
Prima di continuare, proviamo a generalizzare il codice, che in fondo non è
altro che la ripetizione delle stesse righe per 4 volte:
<HTML>
<HEAD>
<TITLE>Esercizio 2</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE=vbscript>
<!--
document.write ("<table border=1>")
giornodelmese="01/" & month(date()) & "/" & year(date())
giorno=1
for ciclo=1 to 4
document.write ("<tr>")
giornodellaset=WeekDay(giornodelmese)
for i=1 to giornodellaset-1
document.write ("<td> </td>")
next
for i=giornodellaset to 7
document.write ("<td>" & giorno & "</td>")
giorno=giorno+1
next
document.write ("</tr>")
giornodelmese=(giorno) & "/" & month(date()) & "/" & year(date())
next
document.write ("</table>")
//-->
</SCRIPT>
</BODY>
</HTML>
Quante volte deve essere ripetuto il ciclo? Dipende da quanti sono i giorni
del mese e da che giorno è il primo del mese. Pensandoci un po', si va
dai 4 ai 6 cicli. Per determinare la fine del mese, si può usare questo
espediente: dal primo del mese successivo si toglie un giorno
primodelmesesuccessivo="01" & "/" & (month(date())+1)
& "/" & Year(date())
ultimodelmese=DateAdd("d",-1,primodelmesesuccessivo)
Ora non ci resta che continuare il ciclo finchè la variabile giorno
è minore dell' ultimo del mese:
<HTML>
<HEAD>
<TITLE>Esercizio 2</TITLE>
</HEAD>
<BODY>
<script type="text/vbscript">
<!--
document.write ("<table border=1>")
giornodelmese="01/" & month(date()) & "/" & year(date())
giorno=1
primodelmesesuccessivo="01" & "/" & (month(date())+1) & "/" & Year(date())
ultimodelmese=DateAdd("d",-1,primodelmesesuccessivo)
While (giorno<day(ultimodelmese))
document.write ("<tr>")
giornodellaset=WeekDay(giornodelmese)
for i=1 to giornodellaset-1
document.write ("<td> </td>")
next
for i=giornodellaset to 7
document.write ("<td>" & giorno & "</td>")
giorno=giorno+1
next
document.write ("</tr>")
giornodelmese=(giorno) & "/" & month(date()) & "/" & year(date())
Wend
document.write ("</table>")
//-->
</SCRIPT>
</BODY>
</HTML>
<script type="text/vbscript">
<!--
document.write ("<table class="tabella" border=1>")
giornodelmese="01/" & month(date()) & "/" & year(date())
giorno=1
primodelmesesuccessivo="01" & "/" & (month(date())+1) & "/" & Year(date())
ultimodelmese=DateAdd("d",-1,primodelmesesuccessivo)
While (giorno<day(ultimodelmese))
document.write ("<tr>")
giornodellaset=WeekDay(giornodelmese)
for i=1 to giornodellaset-1
document.write ("<td> </td>")
next
for i=giornodellaset to 7
document.write ("<td>" & giorno & "</td>")
giorno=giorno+1
next
document.write ("</tr>")
giornodelmese=(giorno) & "/" & month(date()) & "/" & year(date())
Wend
document.write ("</table>")
//-->
</script>
Non ci resta che bloccare la scrittura dei giorni alla fine del mese ed abbellire il tutto:
<script type="text/vbscript">
<!--
document.write ("<table border=1>")
document.write ("<tr><td align=center colspan=7>" &
Ucase(monthname(month(date()))) & " " & year(date()) & "</td></tr>")
document.write
("<tr><td>D</td><td>L</td><td>M</td><td>M</td><td>G</td><td>V</td><td>S<
;/td></tr>")
giornodelmese="01/" & month(date()) & "/" & year(date())
giorno=1
'questo controllo risolve il probelma del mese di dicembre
if (month(date())+1)>12 then
anno=Year(date())+1
mese=1
else
anno=Year(date())
mese=(month(date())+1)
end if
primodelmesesuccessivo="01" & "/" & mese & "/" & anno
ultimodelmese=DateAdd("d",-1,primodelmesesuccessivo)
While (giorno<day(ultimodelmese))
document.write ("<tr>")
giornodellaset=WeekDay(giornodelmese)
for i=1 to giornodellaset-1
document.write ("<td> </td>")
next
for i=giornodellaset to 7
document.write ("<td>" & giorno & "</td>")
giorno=giorno+1
if giorno>day(ultimodelmese) then exit for
next
for i=i+1 to 7
document.write ("<td> </td>")
next
document.write ("</tr>")
giornodelmese=(giorno) & "/" & month(date()) & "/" & year(date())
Wend
document.write ("</table>")
//-->
</SCRIPT>
Per chi ama le nuove tecnologie, in ASP.NET un calendario simile a quello appena creato si ottiene richiamando un oggetto!