4.5k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo,

ich möchte mit Javascript das Änderungsdatum der HTML-Seite anzeigen lassen. Dies funktioniert offline, aber nicht online. Da wird der heutige Tag angezeigt und es erscheint eine Fehlermeldung im Browser unten links "Fehler auf dieser Seite". Kann an der angegbenen Stelle aber keinen finden: Zeile 21, Spalte 60. Der Pfad zum Script stimmt, da der Rest des Datums (Monat und Jahr) richtig angezeigt wird, nur nicht der richtige Tag.

Das folgende Script befindet sich in einer externen Datei updatum.js:
function datum(){
mn = new Array("Jan.","Febr.","März","Apr.","Mai","Juni","Juli","Aug.","Sept.","Okt.","Nov.","Dez.");
d = new Date(document.lastModified);
m = mn[d.getMonth()];
t = d.getDate();
jj = d.getYear();
j = (jj>=2000)?jj:((jj<80)?jj+2000:jj+1900);
dat = (t+". "+m+" "+j);
}

Die funktion wird in der HTML mit folgenden Code aufgerufen:
head
<script src="./scripte/updatum.js" type="text/javascript"></script>
/head

body
<SCRIPT language="JavaScript" type="text/javascript">datum(); document.write("Stand: " + dat );</SCRIPT>
/body

Wo könnte der Fehler liegen?

Danke!

20 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Also ganz konkret:

Firefox 3.3.5: "Stand: 17. Febr. 2010"
Opera 10.10: "Stand: 1. Jan. 1970"
IE 6.0: "Stand: 17. Febr. 2010"
Safari 4.0.4: "Stand: 17. Febr. 2010"

...aber du willst ja gestern, richtig? Ich denk mal, hier zählt wirklich für jeden Browser seine lokale Datei, wenn überhaupt. Also mal hypothetisch angenommen jeder Browser leert seinen Cache bis morgen nicht - dann könnte morgen vielleicht immernoch "17. Febr." dastehen. Aber das Skript selbst kann auch Schuld sein, da es im Zweifelsfall das heutige Datum nimmt...
0 Punkte
Beantwortet von
@son_quatsch

...aber du willst ja gestern, richtig?

Nein, ich möcht. dass das Datum angezeigt wird, an dem die Datei lokal auf meinem Rechner geändert wurde, nicht wenn sie hochgeladen oder vom Server abgerufen wurde. Beim IE und Firefox ( die ich auch getestet habe) müsste es bei fasst allen Seiten so lauten: "Stand: 15. Febr. 2010"

Wie ich schon bei meiner Suche im Internet gefunden habe, interpätiert jeder Browser den Aufruf lastModified anders, das wäre ja noch hinzukriegen. Aber das Anzeigen des gewünschten Datums nicht, wie schon in meiner Fragestellung beschrieben, funktioniert es offline ohne Probleme, nur nicht wenn die Seiten vom Server aufgerufen werden.
Das Problem lässt sich warscheinlich nur mit PHP lösen, aber das bietet mein Server nicht.
0 Punkte
Beantwortet von
Nachtrag:
Ich werde nochmal das Script ändern, so das im Zweifelsfall nicht das heutige Datum genommen wird. Hatte ich aber Ursprünglich schon, mit dem gleichen Problem.
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Beim tranferieren von Dateien gehen deren Metainformationen und Attribute meist verloren. Überlegen wir kurz die Wegstrecke:

1.) Du lädst die Seite auf den Server hoch. Per HTTP? Dann ist das Dateidatum in jedem Fall verloren. Per FTP? Dann muss der Server erstmal den Dateizeit-Befehl unterstützen.
2.) Auf dem Server existiert jetzt eine Kopie deiner Datei - die dort zu dem Zeitpunkt ERSTELLT wurde, an welchem sie hochgeladen wurde. Mit etwas Glück wird per FTP der von dir verwendete Zeitstempel übernommen.
3.) Der Server verschickt per HTTP an jeden anfragenden Client die Datei inklusive DATE-Header. Letzterer dient jedoch dem Client (sprich Browser) in erster Linie dazu, zu erkennen, ob sich die Datei seit dem letzten Aufruf geändert hat - und nicht, um eine etwaige lokale Kopie (die als Cache fungiert) ebenfalls wieder mit dem entsprechenden Zeitstempel zu versehen. Es ist auch gar nicht gesagt, ob die Angabe von DATE der Dateizeit entspricht.

Um es abzukürzen: ja, mach es per PHP. Damit kannst du zumindest die Dateizeit der PHP-Datei ermitteln - auch wenn das vielleicht nur der Zeitpunkt des hochladens war. Aber du musst nicht mehr auf die unterschiedliche Darstellung der Browser achten und kannst obendrein dein Anzeigeformat völlig selbst bestimmen... und musst auch kein JavaScript verwenden.

Aber ganz ehrlich: bei der Seite und den Techniken hab ich so meine Zweifel, ob dir PHP eine Hilfe sein wird...
0 Punkte
Beantwortet von
PHP funktioniert auf meinen Server nicht. Es würde ja reichen, das Datum anzuzeigen, wann die Datei hochgeladen wurde, also auf dem Server erneuert wurde. Die Seite(n) wurden somit auch aktuallisiert. Ob das mit Javascript möglich ist?
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Neihen!

JavaScript legt erst im Browser los. Da ist der Server schon lange fertig. Deswegen "klappt" das auch bei dir lokal alles - weil dort der Weg Server->Browser nicht gegeben ist.
0 Punkte
Beantwortet von
Angesichts deiner technischen und fachlichen Voraussetzungen empfehle ich dir auf jegliche Skripte zu verzichten und das gewünschte Datum einfach von Hand einzutragen.
0 Punkte
Beantwortet von
Ok, danke!
Um die Sache etwas zu automatisieren habe ich mir ein Script erstellt, dass mir halt das Änderungsdatum gleich in alle Seiten einträgt. So brauche ich das Datum nur einmal einzugeben.


function update() {
var Datum = "10.02.2010" // Datum manuell eingeben!!
var wo = document.getElementById("geaendert");
if (wo) wo.firstChild.data = "Stand: " + Datum;
}
window.onload = function() { update(); }

<body>
<span id="geaendert">&nbsp;</span>
</body>
0 Punkte
Beantwortet von
die Art der Einbindung gibt Konflikte mit
<body onload="bilderinit()" ...>

Du hast dann 2 x onload und der Browser muss sich für eins davon entscheiden.

Abhilfe: schmeiß bei body das onload="bilderinit()" raus und ergänze dein Skript in dieser Art:

window.onload = function() {
update();
bilderinit();
}

Das ist zudem übersichtlicher, da dann nicht im ganzen Quelltext irgendwo JavaScript-Schnippselchen versteckt sind.
0 Punkte
Beantwortet von
Es ist wohl doch besser das Datum bei einer Seitenänderung gleich mit zu ändern, wenn man einmal auf der Seite ist. Es ist aber so, dass man es mal vergessen kann, da es woanders steht als der eigentliche Text.

Danke nochmal für euere Unterstützung.
...