Java & JavaScript


Home
Applets
Scripts
   Navigation:
 · Kontextmenü
 · Linkwechsler
   Dialogboxen:
 · Alert
 · Alert 2
 · Confirm
 · Prompt
   Animation:
 · Kreis
 · Kreis 2
 · Kreis 3
 · Drei Kreise
 · Spirale
 · Planetarium
 · Globus
   Grafik-Effekte:
 · Clipping
 · Clipping 2
 · Clipping 3
 · Alpha-Clipping
 · Fading
 · Wellenmuster
 · Wellenmuster 2
   Bildschirmschoner:
 · Proto
 · Marquee
 · Donut
 · Worm
 · Mondrian
 · Pacman
   Datum & Uhrzeit:
 · Countdown
 · Countup
 · Wochentag
 · Last Modified
   Fraktale:
 · Apfelmännchen
 · Apfelmännchen 2
 · Juliamenge
 · Juliamenge 2
 · C-Wert-Generator
   Mathematik:
 · Primzahlen
 · Primzahlen 2
   Verschiedenes:
 · Dynamic Popup
 · TextArea Counter
 · Warteschleife
 · Mausschreiber
Gäste
Kontakt

- JavaScript : Datum & Uhrzeit : Wochentag -


Mit JavaScript den Wochentag eines beliebigen Datums zwischen dem 01.01.0001 und dem 31.12.9999 berechnen.

Erfolgreich getestet mit Internet Explorer 5.5 und 6.0, Netscape 4.75, 6.1, 6.22, 7.0 und 7.1, Mozilla 1.0, 1.21 und 1.4 sowie Opera 6.01 und 7.01.

Das Script gibt es gleich in zwei Versionen. Denn nachdem das erste fertig war, bemerkte ich, dass die Wochentag-Brechnung mit dem bordeigenen JavaScript-Objekt 'Date', zumindest für die Jahre nach 1582 viel einfacher zu programmieren ist. Doch da 'Date' die Kalenderreform von 1582 (Julianischer Kalender -> Gregorianischer Kalender) unbekannt ist, wird für die Zeit davor doch wieder weiterer Programm-Code benötigt. (Falls Sie etwa wissen wollen, an welchem Wochentag Kolumbus Amerika entdeckte -> 12.10.1492)


Demo 1:

Geben Sie ein gültiges Datum in der Form tt.mm.jjjj ein:

 


Der Quelltext:

<html>
  <head>
    <title>Wochentag berechen mit JavaScript</title>

    <script language="JavaScript">
      function init() {
        // Datum auslesen und überprüfen
        var date = document.weekdayform.weekdayinput.value;
        var dd = date.substr(0,2);
        var mm = date.substr(3,2);
        var yyyy = date.substr(6,4);

        if(date.length!=10 || isNaN(dd+mm+yyyy)==1) alert("Falsche Eingabe !");
        else if(yyyy==1582 && mm==10 && dd >4 && dd < 15)
            alert("Datum existiert nicht !"); // wg. Kalenderreform

        else getWeekDay(dd,mm,yyyy);
      }

      function getWeekDay(dd,mm,yyyy) {
        // Referenztag ist Samstag, der 01.01.0001.
        // Nun werden alle Tage bis zum Eingabe-Datum gezählt.
        // Alle-Vergangenen-Tage modulo 7 ergibt dann eine Zahl
        // zwischen 0 und 6, die einen Wochentag
        // zwischen Samstag und Freitag repräsentiert.

        // grobe Zählung: Ganze Jahre +
        // Tage im aktuellen Monat + ganze Monate im aktuellen Jahr
        var month = "312831303130313130313031";
        var days = (yyyy-1)*365 + (dd-1);
        for(var i=0;i<mm-1;i++) days += month.substr(i*2,2)*1;

        // Kalenderreform: Sprung vom 04.10.1582 zum 15.10.1582
        if(yyyy>1582 || yyyy==1582 && (mm>10 || mm==10 && dd >4)) days -= 10;

        // Schaltjahre bis 1599: alle Jahre, die durch 4 teilbar sind.
        // Ab 1600: alle Jahre, die durch 4 teilbar sind,
        // außer den vollen Jahrhunderten,
        // es sei denn, sie sind durch 400 teilbar.
        var leapyears = Math.floor(yyyy / 4);
        if(yyyy%4==0 && mm<3) leapyears--;
        if(yyyy>=1600) {
          leapyears -= Math.floor((yyyy-1600) / 100);
          leapyears += Math.floor((yyyy-1600) / 400);
          if(yyyy%100==0 && mm<3) {
            leapyears++;
            if(yyyy%400==0) leapyears--;
          }
        }
        days += leapyears;

        // Ergebnis anzeigen
        var week = "SaSoMoDiMiDoFr";
        alert(week.substr(days%7*2,2)+",  "+ dd+"."+mm+"."+yyyy);
      }
    </script>
  </head>

  <body>
    <form name="weekdayform" action="javascript:init()">
      <p>
        <input name="weekdayinput">
        <input type="button" value="Zeige Wochentag" onclick="init()">
      </p>
    </form>
  <body>
</html>

Während das erste Script den Referenztag 01.01.0001 verwendet, benutzt das zweite Script die computer-offizielle Datum-Referenz vom 01.01.1970, 0 Uhr, 0 Minuten und 0 Sekunden.


Demo 2:

Geben Sie ein gültiges Datum in der Form tt.mm.jjjj ein:

 


Der Quelltext:

<html>
  <head>
    <title>Wochentag berechen mit JavaScript</title>

    <script language="JavaScript">
      function init2() {
        // Datum auslesen und überprüfen
        var date = document.weekdayform2.weekdayinput2.value;
        var yyyy=date.substr(6,4);
        var mm=date.substr(3,2);
        var dd=date.substr(0,2);

        if(date.length!=10 || isNaN(dd+mm+yyyy)==1) alert("Falsche Eingabe !");
        else if(yyyy==1582 && mm==10 && dd >4 && dd < 15)
            alert("Datum existiert nicht !"); // wg. Kalenderreform
        else getWeekDay2(dd,mm,yyyy,date);
      }

      function getWeekDay2(dd,mm,yyyy,date) {
        // Referenz ist Donnerstag, der 01.01.1970 00:00:00 Uhr
        // Von diesem Datum bis zum gesuchten Tag werden mit
        // dem JavaScript-Objekt Date die Millisekunden gezählt
        // und der Wochentag abgefragt.
        // Für Jahre seit 1970 und vor 0100
        // sind die mSek-Angaben positiv, dazwischen negativ

        // Eingabe-Datum in mSek umwandeln
        var timeObj=new Date();
        var time=Date.UTC(yyyy,(mm-1),dd);

        // Kalenderreform berücksichtigen, d.h. + 10 Tage
        if(yyyy<1582 || yyyy==1582 && (mm<10 || mm==10 && dd<15))
            time+=10*24*60*60*1000;
        // Über das Date-Objekt werden die Schaltjahre
        // vor der Reform genauso berechnet wie danach.
        // Also müssen die Schalttage in den vollen
        // Jahrhunderten, die nicht durch 400 teilbar sind,
        // wieder 'hinzugezählt' werden (Vorzeichen beachten)
        for(k=0;k<4;k++) {
          for(year=1500-k*400;year>1200-k*400;year-=100) {
            if(yyyy<year || yyyy==year && mm<3) time-=24*60*60*1000;
          }
        }

        // Wegen internem Vorzeichen-Wechsel zwischen
        // dem 31.12.0099 und dem 01.01.0100 (??!)
        // muss hier ein weiterer Tag 'addiert' werden.
        if(yyyy<100) time-=24*60*60*1000;

        // Wochentag auslesen (0-6)
        timeObj.setTime(time);
        weekday=timeObj.getDay();

        // Ergebnis anzeigen
        var week = "SoMoDiMiDoFrSa";
        alert(week.substr(weekday*2,2)+",  "+ dd+"."+mm+"."+yyyy);
      }
    </script>
  </head>

  <body>
    <form name="weekdayform2" action="javascript:init2()">
      <p>
        <input name="weekdayinput2">
        <input type="button" value="Zeige Wochentag" onclick="init2()">
      </p>
    </form>
  <body>

</html>

Bezüglich der gregorianischen Kalenderreform (10-Tage-Sprung vom 4. auf den 15. Oktober 1582 und neue Schaltjahr-Berechnung ab 1600) beachten Sie bitte, dass 1582 nur das offizielle Datum des päpstliches Erlasses zur Reform ist und dass die tatsächliche Änderung, in den verschiedenen Regionen der Welt mit christlicher Zeitrechnung, erst mit zum Teil erheblicher Verzögerung vollzogen wurde:

1582 - Italien, kath. Deutschland, Frankreich und Spanien
1699 - Dänemark
1700 - prot. Deutschland
1752 - Großbritannien
1753 - Schweden
1873 - Japan
1875 - Ägypten
1912 - China
1918 - Russland
1923 - Griechenland
1927 - Türkei


Download  Wochentag.zip (1 + 2, ca. 2 kb)


(Überings: Wenn Sie ein WAP- und WMLScript-fähiges Handy besitzen, können Sie das erste Programm in seiner fast identischen WMLScript-Version auch unterwegs nutzen: www.wmlscript.de/wap.)




© 2001-2004 Albert Kluge - Alle Rechte vorbehalten
Impressum | Datenschutz | Nutzung | eMail