Hallo zusammen!
Ich möchte mit Javascript einen "date-picker" machen.
Da ich noch Anfänger in Sachen Javascript bin, hab ich erst mal gegoogelt und Informationen gesucht.
Ich hab auch viel gefunden, aber keiner der date-picker war so wie ich ihn wollte, und generell ist es mir eigentlich lieber, dass ich genau weiß, was ein Script macht, und das war bei den (sehr umfangreichen) freien Scripts leider nicht der Fall.
Ich hab also mal in SelfHTML nachgesehen, und dort ein Beispiel gefunden.
Es ist zwar nur ein kleiner Kalender ohne Funktion, aber für den Anfang mal genau das was ich gesucht hab.
Da ich noch kein Experte in Javascript bin, hab ich mir mal die zeit genommen, den Code zu kommentieren (damit ich auch sichergehen kann, dass ich alles verstanden hab) und bin auf eine Zeile gestoßen, die mir nicht ganz klar ist:
der ganze Code sieht so aus:
[code]
<script type="text/javascript">
/* Kalender */
var d = new Date(); /* aktuelles Datum ermitteln */
var dm = d.getMonth() + 1; /* aktuellen Monat ermitteln */
var dj = d.getYear(); /* aktuelles Jahr ermitteln */
if (dj < 999) /* wird bei älteren Browsern benötigt, die nicht Jahr-2000-kompatibel sind */
{ dj += 1900; } /* damit bei getYear das richtige Jahr ermittelt wird */
Kalender(dm, dj); /* Funktion Kalender aufrufen */
function Kalender (Monat, Jahr)
{
/* Monatsnamen definieren */
Monatsname = new Array("Jänner", "Februar", "März", "April", "Mai", "Juni", "Juli",
"August", "September", "Oktober", "November", "Dezember");
/* Wochentagsnamen definieren */
Tag = new Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
var KSchrArt = "Verdana,Arial"; /* Schriftart Kalenderkopf */
var KSchrGroesse = 3; /* Schriftgroesse 1-7 Kalenderkopf */
var KSchrFarbe = "#FFFF00"; /* Schriftfarbe Kalenderkopf */
var Khgrund = "#000066"; /* Hintergrundfarbe Kalenderkopf */
var TSchrArt = "Verdana,Arial"; /* Schriftart Tagesanzeige */
var TSchrGroesse = 3; /* Schriftgroesse 1-7 Tagesanzeige */
var TSchrFarbe = "#000000"; /* Schriftfarbe Tagesanzeige */
var Thgrund = "#D0F0F0"; /* Hintergrundfarbe Tagesanzeige */
var SoFarbe = "#E00000"; /* Schriftfarbe f. Sonntage */
var Ahgrund = "#FFFF00"; /* Hintergrundfarbe f. heutigen Tag */
var jetzt = new Date(); /* aktuelles Datum ermitteln */
var DieserMonat = jetzt.getMonth() + 1; /* aktuellen Monat ermitteln */
var DiesesJahr = jetzt.getYear(); /* aktuelles Jahr ermitteln */
if (DiesesJahr < 999) /* wird bei älteren Browsern benötigt, siehe oben */
{ DiesesJahr += 1900; }
var DieserTag = jetzt.getDate(); /* aktuellen Tag ermitteln */
var Zeit = new Date(Jahr, Monat - 1, 1); /* Datum vom 1. des Monats ermitteln */
var Start = Zeit.getDay(); /* Wochentag des 1. im Monat ermitteln */
if (Start > 0) /* wenn kleiner 0 = -1 (Fehler ?) */
{ Start--; }
else /* ansonsten = 6 */
{ Start = 6; }
var Stop = 31; /* Anzahl der Tage im Monat */
if (Monat == 4 || Monat == 6 || Monat == 9 || Monat == 11) /* April, Juni, September und November haben 30 Tage */
{ --Stop; } /* 31 - 1 = 30 */
if (Monat == 2) /* Februar hat 28 oder 29 Tage */
{
Stop = Stop - 3; /* 31 - 3 = 28 */
if (Jahr % 4 == 0) /* wenn Jahr durch 4 teilbar = Schaltjahr */
{
Stop++; /* 28 + 1 = 29 */
if (Jahr % 100 == 0) /* wenn Jahr auch durch 100 teilbar = kein Schaltjahr */
{ Stop--; } /* 29 - 1 = 28 */
}
if (Jahr % 400 == 0) /* wenn Jahr durch 400 teilbar = Schaltjahr */
{ Stop++; } /* 28 + 1 = 29 */
}
document.write('<table border="3" cellpadding="1" cellspacing="1">');
/* Monatskopf im Format: Monatsname " " Jahr erstellen -> August 2005 */
var Monatskopf = Monatsname[Monat - 1] + " " + Jahr;
/* Funktion Schreibekopf aufrufen */
SchreibeKopf(Monatskopf, Khgrund, KSchrFarbe, KSchrGroesse, KSchrArt);
/* Tageszahl dient als Zähler, sie wird mit jedem ausgegebenen Tag um 1 erhöht */
var Tageszahl = 1;
/* 6 Reihen für die Wochen erstellen */
for (var i = 0; i <= 5; i++)
{
document.write("<tr>");
/* 6 Zellen für die ersten 6 Tage erstellen -> wenn der 1. des Monats ein Sonntag ist bleiben die ersten 6 Zellen leer */
for (var j = 0; j <= 5; j++)
{
/* Wenn der 1. des Monats kein Montag ist, bleibt die 1. Zelle leer -> erzwungene Leerzeichen (

Ich möchte mit Javascript einen "date-picker" machen.
Da ich noch Anfänger in Sachen Javascript bin, hab ich erst mal gegoogelt und Informationen gesucht.
Ich hab auch viel gefunden, aber keiner der date-picker war so wie ich ihn wollte, und generell ist es mir eigentlich lieber, dass ich genau weiß, was ein Script macht, und das war bei den (sehr umfangreichen) freien Scripts leider nicht der Fall.
Ich hab also mal in SelfHTML nachgesehen, und dort ein Beispiel gefunden.
Es ist zwar nur ein kleiner Kalender ohne Funktion, aber für den Anfang mal genau das was ich gesucht hab.
Da ich noch kein Experte in Javascript bin, hab ich mir mal die zeit genommen, den Code zu kommentieren (damit ich auch sichergehen kann, dass ich alles verstanden hab) und bin auf eine Zeile gestoßen, die mir nicht ganz klar ist:
Code:
if (Start > 0) /* wenn kleiner 0 = -1 (Warum das ?) */ { Start--; }
[code]
<script type="text/javascript">
/* Kalender */
var d = new Date(); /* aktuelles Datum ermitteln */
var dm = d.getMonth() + 1; /* aktuellen Monat ermitteln */
var dj = d.getYear(); /* aktuelles Jahr ermitteln */
if (dj < 999) /* wird bei älteren Browsern benötigt, die nicht Jahr-2000-kompatibel sind */
{ dj += 1900; } /* damit bei getYear das richtige Jahr ermittelt wird */
Kalender(dm, dj); /* Funktion Kalender aufrufen */
function Kalender (Monat, Jahr)
{
/* Monatsnamen definieren */
Monatsname = new Array("Jänner", "Februar", "März", "April", "Mai", "Juni", "Juli",
"August", "September", "Oktober", "November", "Dezember");
/* Wochentagsnamen definieren */
Tag = new Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
var KSchrArt = "Verdana,Arial"; /* Schriftart Kalenderkopf */
var KSchrGroesse = 3; /* Schriftgroesse 1-7 Kalenderkopf */
var KSchrFarbe = "#FFFF00"; /* Schriftfarbe Kalenderkopf */
var Khgrund = "#000066"; /* Hintergrundfarbe Kalenderkopf */
var TSchrArt = "Verdana,Arial"; /* Schriftart Tagesanzeige */
var TSchrGroesse = 3; /* Schriftgroesse 1-7 Tagesanzeige */
var TSchrFarbe = "#000000"; /* Schriftfarbe Tagesanzeige */
var Thgrund = "#D0F0F0"; /* Hintergrundfarbe Tagesanzeige */
var SoFarbe = "#E00000"; /* Schriftfarbe f. Sonntage */
var Ahgrund = "#FFFF00"; /* Hintergrundfarbe f. heutigen Tag */
var jetzt = new Date(); /* aktuelles Datum ermitteln */
var DieserMonat = jetzt.getMonth() + 1; /* aktuellen Monat ermitteln */
var DiesesJahr = jetzt.getYear(); /* aktuelles Jahr ermitteln */
if (DiesesJahr < 999) /* wird bei älteren Browsern benötigt, siehe oben */
{ DiesesJahr += 1900; }
var DieserTag = jetzt.getDate(); /* aktuellen Tag ermitteln */
var Zeit = new Date(Jahr, Monat - 1, 1); /* Datum vom 1. des Monats ermitteln */
var Start = Zeit.getDay(); /* Wochentag des 1. im Monat ermitteln */
if (Start > 0) /* wenn kleiner 0 = -1 (Fehler ?) */
{ Start--; }
else /* ansonsten = 6 */
{ Start = 6; }
var Stop = 31; /* Anzahl der Tage im Monat */
if (Monat == 4 || Monat == 6 || Monat == 9 || Monat == 11) /* April, Juni, September und November haben 30 Tage */
{ --Stop; } /* 31 - 1 = 30 */
if (Monat == 2) /* Februar hat 28 oder 29 Tage */
{
Stop = Stop - 3; /* 31 - 3 = 28 */
if (Jahr % 4 == 0) /* wenn Jahr durch 4 teilbar = Schaltjahr */
{
Stop++; /* 28 + 1 = 29 */
if (Jahr % 100 == 0) /* wenn Jahr auch durch 100 teilbar = kein Schaltjahr */
{ Stop--; } /* 29 - 1 = 28 */
}
if (Jahr % 400 == 0) /* wenn Jahr durch 400 teilbar = Schaltjahr */
{ Stop++; } /* 28 + 1 = 29 */
}
document.write('<table border="3" cellpadding="1" cellspacing="1">');
/* Monatskopf im Format: Monatsname " " Jahr erstellen -> August 2005 */
var Monatskopf = Monatsname[Monat - 1] + " " + Jahr;
/* Funktion Schreibekopf aufrufen */
SchreibeKopf(Monatskopf, Khgrund, KSchrFarbe, KSchrGroesse, KSchrArt);
/* Tageszahl dient als Zähler, sie wird mit jedem ausgegebenen Tag um 1 erhöht */
var Tageszahl = 1;
/* 6 Reihen für die Wochen erstellen */
for (var i = 0; i <= 5; i++)
{
document.write("<tr>");
/* 6 Zellen für die ersten 6 Tage erstellen -> wenn der 1. des Monats ein Sonntag ist bleiben die ersten 6 Zellen leer */
for (var j = 0; j <= 5; j++)
{
/* Wenn der 1. des Monats kein Montag ist, bleibt die 1. Zelle leer -> erzwungene Leerzeichen (
Kommentar