Beispiel:Monatskalender-2.html

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

<!DOCTYPE html> <html lang="de"> <head>

 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <link rel="stylesheet" media="screen" href="./Beispiel:Grundlayout.css">  
 <style>

table {

 width: 350px;

}

table, td, caption {

   border: thin solid black;
   border-collapse: collapse;
   padding: 0.4em;
   text-align: center;

}

td:nth-of-type(6),td:nth-of-type(7) {

 background: #ebf5d7;
 color: #666;

}

caption, tr:first-of-type {

 background: #666;
 color: #c4ced3;
 font-weight: bold;

} td.heute {

 color:red; 
 font-weight: bold;
 background: #ffebe6;

}

</style>

 <title>Monatskalender</title>

</head> <body>

Monatskalender


<script>

 // dm und dj sind Monat und Jahr, die im Kalender dargestellt werden
 // insbesondere könnte auch ein Monat gewählt werden, in dem das aktuelle Datum nicht vorkommt
 const d = new Date();
 const dm = d.getMonth() + 1;
 const dj = d.getYear() + 1900;
 Kalender(dm, dj, 'kalender');
 function Kalender (Monat, Jahr, KalenderId) {
   const Monatsname = new Array("Januar", "Februar", "März", "April", "Mai", "Juni",
                                "Juli", "August", "September", "Oktober", "November", "Dezember");
   const Tag = new Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
   // aktuelles Datum für die spätere Hervorhebung ermitteln
   const jetzt = new Date();
   let DieserTag = -1;
   if ( (jetzt.getFullYear() == Jahr) && (jetzt.getMonth() + 1 == Monat) )
     DieserTag = jetzt.getDate();
   // ermittle Wochentag des ersten Tags im Monat halte diese Information in Start fest
   // getDay liefert 0..6 für So..Sa. Wir möchten aber Mo=0 bis So=6, darum +6 und mod 7.
   const Zeit = new Date(Jahr, Monat - 1, 1);
   const Start = (Zeit.getDay() + 6) % 7;
   // die meisten Monate haben 31 Tage...
   let Stop = 31;
   // ...April (4), Juni (6), September (9) und November (11) haben nur 30 Tage...
   if (Monat == 4 || Monat == 6 || Monat == 9 || Monat == 11)
     --Stop;
   // ...und der Februar nur 28 Tage...
   if (Monat == 2) {
     Stop = Stop-3;
     // ...außer in Schaltjahren
     if (Jahr %   4 == 0) Stop++;
     if (Jahr % 100 == 0) Stop--;
     if (Jahr % 400 == 0) Stop++;
   }
   const tabelle = document.getElementById(KalenderId);
   if (!tabelle)
     return false;
   // schreibe Tabellenüberschrift
   const caption = tabelle.createCaption();
   caption.innerHTML = Monatsname[Monat - 1] + " " + Jahr;
   // schreibe Tabellenkopf
   const headRow = tabelle.insertRow(0);
   for (var i = 0; i < 7; i++) {
     var cell = headRow.insertCell(i);
     cell.innerHTML = Tag[i];
   }
   // ermittle Tag und schreibe Zeile
   let Tageszahl = 1;

   // Monate können 4 bis 6 Wochen berühren. Darum laufen, bis die Tageszahl hinter dem Monatsletzen liegt.
   for (let i = 0; Tageszahl <= Stop; i++) {
     let row = tabelle.insertRow(1 +i);
 
     for (let j = 0; j < 7; j++) {
       let cell = row.insertCell(j);
       // Zellen vor dem Start-Tag in der ersten Zeile und Zeilen nach dem Stop-Tag werden leer aufgefüllt
       if ( ((i == 0) && (j < Start)) || (Tageszahl > Stop) ) {
         cell.innerHTML = ' ';
       } else {
         // normale Zellen werden mit der Tageszahl befüllt und mit der Klasse Kalendertag markiert
         cell.innerHTML = Tageszahl;

cell.className = 'kalendertag'

         // und der aktuelle Tag (heute) wird noch einmal speziell mit der Klasse "heute" markiert
         if (Tageszahl == DieserTag) {
           cell.className = cell.className + ' heute';  
         }
         Tageszahl++;	
       }
     }
   }
   return true;
 }
 </script>  

</body> </html>