Automatisierung


Automatisierung klingt erstmal gut. Worum geht es?
Die Verwaltung vieler Web-Seiten kann ganz schön nerven; anders ausgedrückt: Irgendwann fängt es richtig an, Arbeit zu machen. Einige dieser Arbeiten sind unnötig, weil, die kann der Computer selbst erledigen. Dazu zählt das letzte Aktualisierungsdatum.

Das letzte Bearbeitungsdatum anzeigen

Das letzte Bearbeitungsdatum kann JavaScript selber bestimmen. Es kennt nämlich eine Eigenschaft des Objektes document, die lastModified heißt und das Speicherdatum der Seite ausgeben kann.
Allerdings: Ohne Pferdefuß geht es nicht.

Ruft man die genannte Eigenschaft auf, wozu das folgende genügt:

<script language = JavaScript>
   document.write(document.lastModified);
</script>

dann wird, bei vielen Versuchen (nicht an chinesischen Seiten!) das Datum immer im amerikanischen Format aber in wechselnder Ausführlichkeit ausgegeben. Wer ist schuld? Die Server werden es nicht sein. Wie ausführliche Versuche ergaben, hängt die Anzeige allein (von wem wohl?) vom Browser ab. Für meine Seiten fand ich (natürlich immer gleicher Anbieter) mit 2 Browsern (Firefox und Konqueror) die Kurzform "mm/dd/yyyy hh:mm:ss", mit zwei anderen (Opera, IExplorer 6) eine Langform mit 3stelligem Kürzel des Wochentags und des Monats. Es ist nicht auszuschließen, dass weitere Browser dem Nutzer weiter entgegenkommen und auch bei dieser Angabe das ihnen ja bekannte Gebietsschema zugrunde legen. An den eigentlichen, vom Server versandten Datumswert kommt man ja leider nicht ohne Vermittlung des Browsers heran.

Nun also zu unserer Anzeige --> Guckst Du:


Da ich kein Ami bin, will ich keine der beiden Anzeigen so hinnehmen. Es wär doch einfach nur schön, auf einer deutschsprachigen Seite mit einem deutschformatigen Datum aufzuwarten. (Ja, das klingt deutschtümelnd, ist aber -ehrlich- nicht so gemeint.
Die Datumsanzeige, wie sie der Browser präsentiert, ist (im Browser) zu einem Textstring umgewandelt worden und kommt ohne Instanz des Datum-Objektes aus. Die Folge ist, die schönen Datumsfunktionen, die das Problem lösen könnten, oder auch nicht, wie "toLocaleString()", stehen nicht zur Verfügung.
Gucken wir, was der Browser als Änderungsdatum anzeigt, und was als "lokalen String" dazu:

Das sieht nicht richtig gut aus.

Es gibt nun zwei Möglichkeiten, das Datum in möglichst kompakter und für die Leser passender Form anzubieten. Man kann den angezeigten Datumsstring mit Hilfe von Stringfunktionen aufarbeiten oder den String in eine Datumsangabe zurückverwandeln, die anschließend mit Datumsfunktionen formatierbar ist.

Zuerst die Aufarbeitung des (der) Strings. Die Anzeigen des letzten Bearbeitungsdatums (document.lastModified) sind entweder 19 Zeichen (Kurzform) oder 29 Zeichen (Langform) lang. Unter der etwas wackligen Voraussetzung, dass nur es diese beiden Formen gibt, ist die Erzeugung der richtigen Anzeige eine leichte Übung. Da Tag, Monat und Jahr an immer der gleichen Stelle im String erscheinen, müssen die n8r ausgelesen und angezeigt werden. Nehmen wir zum Angewöhnen den Fall, bei dem die Anzeige 19 Zeichen lang ist:

<script language = JavaScript>
   <!--
   var wort = document.lastModified;
   var datum = wort.substring(3,5) + "." + wort.substring(0,2) + "." + wort.substring(6,10);
   document.write("Letzte Änderung: " + datum);
   // -->
</script>

Alles klar?

Das sollte nun die gewünschte Anzeige ergeben, aber nur dann, wenn oben auf der Seite die Datumskurzform steht. Ansonsten erzeugen wir hier Unsinn. Um beide Darstellungsformen abzudecken, muß nach der Stringlänge unterschieden werden. Dabei gibt es in der Datumslangform insofern eine Komplikation, als hier die Monate als (englische) Kürzel angegeben werden, die eine eigene Umwandlung erfahren müssen.:

<script language = JavaScript>
   <!--
   var wort = document.lastModified;
   if(wort.length == 19)
     datum = wort.substring(5,7) + "." + wort.substring(7,10) + " " + wort.substring(11,15);
   if (wort.length == 29)
    { if (wort.search("Jan") != -1)monat = "01"; if(wort.search("Feb") != -1)monat = "02";
    if(wort.search("Mar") != -1)monat = "03"; if(wort.search("Apr") != -1)monat = "04";
    if(wort.search("May") != -1)monat = "05"; if(wort.search("Jun") != -1)monat = "06";
    if(wort.search("Jul") != -1)monat = "07"; if(wort.search("Aug") != -1)monat = "08";
    if(wort.search("Sep") != -1)monat = "09"; if(wort.search("Oct") != -1)monat = "10";
    if(wort.search("Nov") != -1)monat = "11"; if(wort.search("Dec") != -1)monat = "12";
    datum = wort.substring(5,7) + "." + monat + "." + wort.substring(12,16); }    document.write("Letzte Änderung: " + datum);
   // -->
</script>

Damit sollte nun die richtige Kurzform des Datums erzeugt werden:

jedenfalls, solange es nicht einem Server/Browser-Paar gefällt, etwa andere Längen des Datumsstrings als 19 oder 29 anzubieten. Unser Script würde in solchem Fall kein Datum anzeigen. Sicherheit gegen veränderte Darstellungen des Änderungsdatums gibt es aber mit dieser, heiße sie "Stringlösung", nicht.

Der zweite mögliche Weg, die Umwandlung der textlichen Zeitangabe in eine echte Zeitangabe (Zahl der verflossenen Sekunden seit dem 1. Januar 1970 00:00:00 GMT) nutzt eine mächtige Funktion: Date.parse(). Die zu analysierenden textlichen Datums/Zeitangaben gehören in diesem Fall in die Argumentklammer. Date.parse() analysiert den Text und erzeugt den genannten Datumswert. Aus dem Datumswert lassen sich danach mittels bekannter Datumsfunktionen Tag, Monat und Jahr als Zahlenwert erzeugen. Daraus läßt sich die übliche deutsche Datums-Kurzform zusammenbasteln:

<script language = JavaScript>
   <!--
   datwert = new Date(Date.parse(document.lastModified));
   datum = datwert.getDate() + "." + (datwert.getMonth() + 1) + "." + (datwert.getFullYear() - 2000));
   document.write("Letzte Änderung: " + datum);
   // -->
</script>

Damit ergibt sich die nunmehr hoffentlich krisenfeste Datumsangabe: