Der Jahreskalender ist eigentlich nichts anderes als der Monatskalender auch, allerdings bestand hier die Schwierigkeit, den Wochentag des 1. Januar zu berechnen. Die Aufteilung in 3x4 Monate ergibt auch den etwas umfangreicheren Quellcode. Durch diverse Wiederholungen von bestimmten Passagen habe ich das ganze auch in mehrere einzelne Funktionen aufgeteilt.
Hier gibt's das JavaScript zum downloaden (Nur per rechtem Mausklick!)
Bei Bedarf kann man das JavaScript so erweitert werden, daß für jeden Tag ein eigener Link erzeugt wird, zum Beispiel für einen Terminkalender.
var zeit = new Date();
var dd = zeit.getDate();
var mth = zeit.getMonth() + 1;
var yy = zeit.getYear() + 1900;
var day = zeit.getDay(); /* ergibt eine Zahl (0-6, So bis Samstag) */
var y = day - (dd - 1);
var z = 1; x = 0;
var bg = "ffffff";
var nav = navigator.appName;
var tkurz=new Array("Mo", "Di", "Mi", "Do",
"Fr", "Sa", "So");
var monat=new Array("Januar", "Februar", "März",
"April", "Mai", "Juni", "Juli", "August",
"September", "Oktober", "November", "Dezember");
var tage=new Array("31", "28", "31", "30",
"31", "30", "31", "31", "30",
"31", "30", "31");
var grenze=new Array("0", "-7", "-14", "-21",
"-28");
function start()
{
if (y >= 0) starttag = y + 0;
for (n = 0; n <= 3; n ++) if (grenze[n + 1] <= y && y <= grenze[n]
- 1) starttag = y + (grenze[n + 1] * (-1));
if (-30 <= y && y <= -29) starttag = y + 35;
}
function kopf()
{
document.write("<table border=1 cellspacing=0 bordercolor=#000000>");
document.write("<tr><th colspan=7 align=center bgcolor=#0b4c9b>"+monat[g]+"</th></tr>");
document.write("<tr>");
for (m = 0; m <= 6; m ++) document.write("<td width=20 align=center><font
size=-1><b>"+tkurz[m]+"</b></font></td>");
document.write("</tr>");
}
function body()
{
while(z <= tage[g])
{
document.write("<tr>");
for (l = 0; l <= 6; l ++)
{
if (z > tage[g])
{
document.write("<td> </td>");
x ++;
}
if (z <= tage[g])
{
if (z == dd && g + 1 == mth) bg = "ffff00"; else bg = "ffffff";
document.write("<td align=center bgcolor=#"+bg+">"+z+"</td>");
z ++;
}
}
document.write("</tr>");
}
document.write("</table>");
}
function rest_monate()
{
document.write("<td valign=top>");
kopf();
document.write("<tr>");
z = 1;
for (j = 1; j <= 7 - x; j ++) document.write("<td align=center> </td>");
for (k = 7 - x; k <= 6; k ++)
{
if (z == dd && g + 1 == mth) bg = "ffff00"; else bg = "ffffff";
document.write("<td align=center bgcolor=#"+bg+">"+z+"</td>");
z ++;
}
document.write("</tr>");
x = 0;
body();
document.write("</td>");
}
function monate()
{
if (nav == "Microsoft Internet Explorer") yy -= 1900;
if(yy % 4 == 0 || yy % 400 == 0) tage[1] ++;
if (mth == 1) start();
else
{
start();
for (m = 1; m <= mth - 1; m ++)
{
endtag = starttag - 1;
if (endtag == -1) endtag = 6;
starttag = endtag - (tage[mth - (1 + m)] - 1);
if (starttag <= -29) starttag + = 35; else starttag + = 28;
}
}
document.write("<table border=1 cellspacing=0 bordercolor=#000000><tr><td
valign=top>");
g = 0;
kopf();
document.write("<tr>");
for (j = 0; j <= starttag - 2; j ++) document.write("<td align=center> </td>");
for (k = starttag - 1; k <= 6; k ++)
{
if (z == dd && g + 1 == mth) bg = "ffff00"; else bg = "ffffff";
document.write("<td align=center bgcolor=#"+bg+">"+z+"</td>");
z ++;
}
document.write("</tr>");
body();
document.write("</td>");
for (g = 1; g <= 2; g ++) rest_monate();
document.write("</tr>");
for (h = 0; h <= 6; h + = 3)
{
document.write("<tr>");
for (g = 3 + h; g <= 5 + h; g ++) rest_monate();
document.write("</tr>");
}
document.write("</table>");
}