Seite 1 von 1

Kleines Javascript Problem

Verfasst: 24.07.2006, 18:22
von mark007q
Folgendes Javascript:

Code: Alles auswählen

<script type="text/Javascript">
var d1 = new Date&#40;&#41;;
var d2 = new Date&#40;2006,6,24,0,0,0&#41;;
var day = 1000*60*60*24;
d1.setDate&#40;d1.getDate&#40;&#41; - 1&#41;;
var diff = Math.ceil&#40;&#40;d1.getTime&#40;&#41; - d2.getTime&#40;&#41;&#41;/&#40;day&#41;&#41;;
document.write&#40;"Es wurde vor " + diff&#41;;document.write&#40;" letztmalig auf den Downloadbereich zugegriffen."&#41;;
</script>
Wie kann man das dahingehend verändern, dass z.B. heute nicht folgende Ausgabe erscheint: Es wurde vor 0 Tagen letztmalig auf den Download ...

Sondern: Es wurde heute letztmalig auf den Download ...

Wenn möglich auch noch mit der Variante gestern

Der Rest sollte dann so bleiben, also z.B.

Es wurde vor 3 Tagen letztmalig auf den Download ...

Würde mich über die Codeanpassung fereun !!!

Verfasst:
von

Verfasst: 24.07.2006, 18:37
von oldInternetUser
Ein Blick in die SelfHtml-JavaScript-Referenz löst das Problem doch relativ rasch.
mark007q hat geschrieben:Würde mich über die Codeanpassung fereun !!!
Ich würde mich über deinen Fleiß und dein eigenständiges Bemühen, eine Lösung zu finden, freuen.

Verfasst: 24.07.2006, 20:21
von mark007q
Ok, ich versuche es ... vielleicht könntest du mir noch einmal helfen, irgendwie scheint es so (warum auch immer?) nicht zu klappen:

Code: Alles auswählen

<script type="text/Javascript">
var d1 = new Date&#40;&#41;;
var d2 = new Date&#40;2006,6,24,0,0,0&#41;;
var day = 1000*60*60*24;
d1.setDate&#40;d1.getDate&#40;&#41; - 1&#41;;
var diff = Math.ceil&#40;&#40;d1.getTime&#40;&#41; - d2.getTime&#40;&#41;&#41;/&#40;day&#41;&#41;;
switch &#40;diff&#41; &#123;
  case "0"&#58;
    document.write&#40;"Es wurde heute letztmalig auf den Downloadbereich zugegriffen."&#41;;
    break;
  case "1"&#58;
    document.write&#40;"Es wurde gestern letztmalig auf den Downloadbereich zugegriffen."&#41;;
    break;
  default&#58;
    document.write&#40;"Es wurde vor " + diff&#41;;document.write&#40;" Tagen letztmalig auf den Downloadbereich zugegriffen."&#41;;
    break;
&#125;
</script>
Ich frage mich, warum es so nicht funktioniert?

Verfasst: 24.07.2006, 21:22
von oldInternetUser
mark007q hat geschrieben:Ich frage mich, warum es so nicht funktioniert?
Unsauberer Umgang mit Datentypen.

Theoretisch gibt es zwei Lösungsmöglichkeiten, praktisch funktioniert nur eine im IE6, Opera und im Netscape / FireFox, letztere sind da an einer Stelle doch massiv unsauber.

Also bleibt nur eine Lösung übrig, die auf allen Browsern funktioniert.

Verfasst: 24.07.2006, 21:47
von haha
mark007q hat geschrieben:Ok, ich versuche es ... vielleicht könntest du mir noch einmal helfen, irgendwie scheint es so (warum auch immer?) nicht zu klappen:
Für die Zukunft: Es wäre hilfreich, wenn Du statt "geht nicht" eine Fehlerbeschreibung lieferst; was soll Deiner Meinung nach passieren, was passiert tatsächlich. Damit, mit dem Code und einer Beschreibung, was Du bereits versucht hast, erhöhst Du Deine Chancen auf eine schnelle Antwort beträchtlich, weil Du den Lesern einiges an Arbeit und Rätselraten ersparst.

Aber zu Deinem Problem:

Code: Alles auswählen

var diff = Math.ceil&#40;&#40;d1.getTime&#40;&#41; - d2.getTime&#40;&#41;&#41;/&#40;day&#41;&#41;;
Lass Dir mal die Ergebnisse für verschiedene Szenarien ohne Math.ceil() ausgeben, also

alert(d1.getTime() - d2.getTime())/day);

statt obiger bzw. vor obiger Zeile einfügen.

Dann passe den nachfolgenden Code an die Ergebnisse an. Beachte unter Umständen die Funktionsweise von Math.ceil(), Aufrunden sieht bei positiven Zahlen etwas anders aus als bei negativen.

Davon unabhängig rate ich Dir, einen Tag nicht einfach mit 24 Stunden gleichzusetzen - sowas geht für gewöhnlich an zwei Tagen im Jahr in die Hose, nämlich dann, wenn der Tag 23 bzw. 25 Stunden hat.
Benutze besser die UTC-Funktionen, die kennen zumindest keine Sommer-/Winterzeit.

Verfasst: 24.07.2006, 21:52
von oldInternetUser
Ach @haha, hättest Du deinen Beitrag doch lieber gelöscht gelassen.

Das ist nicht das Problem, natürlich baut man sich erst einmal hartcodiert Testdaten.

Verfasst: 24.07.2006, 22:14
von mark007q
Naja, was genau ist denn das Problem? Unsauberer Umgang mit Datentypen ... ich kann mir denken, was damit gemeint ist, offensichtlich wird durch "case" nur Text abgefragt, "case" müsste allerdings "eine Zahl vergleichen".

Frage: Wie macht man das?

Verfasst: 24.07.2006, 23:59
von net(t)worker
text:
case "0":


zahl:
case 0:

:wink:

Verfasst: 25.07.2006, 08:47
von haha
oldInternetUser hat geschrieben:Ach @haha, hättest Du deinen Beitrag doch lieber gelöscht gelassen.
Nana, man nicht so gehässig herablassend. Außerdem hatte ich den Beitrag nicht gelöscht.
Das ist nicht das Problem, natürlich baut man sich erst einmal hartcodiert Testdaten.
Ach, hättest Du meinen Beitrag doch lieber gelesen. An den Daten habe ich nichts auszusetzen gehabt, lediglich an ihrer Verwendung. Älteres Datum abzüglich neueres Datum ergibt grundsätzlich negative Werte, was sich schlecht mit einem Vergleich mit positiven Werten verträgt.
Somit hat er nicht ein, sondern zwei Fehler in seinem Code. Und welchen Fehler er meinte, hat er ja nicht verraten :)

Verfasst: 25.07.2006, 15:53
von mark007q
Danke networker, das war genau das Problem ... und so einfach die Lösung.

@alle anderen: Ich sehe sonst keine Schwierigkeiten, das Skript läuft ohne Fehler, keine Ahnung über was ihr euch da Gedanken macht.

Postet doch mal exakt was ihr meint, am besten mit Beispiel.

Verfasst: 25.07.2006, 16:30
von oldInternetUser
mark007q hat geschrieben:Danke networker, das war genau das Problem ... und so einfach die Lösung.
Das ist genau die Lösung, die bei mir im FireFox / Netscape nicht funktioniert hat.

@mark007q: Hast Du es mit diesen Browsern auch getestet oder nur mit dem IE?

Verfasst: 25.07.2006, 18:09
von mark007q
Funktioniert mit IE, FireFox, Opera ... mehr habe ich nicht getestet.

Verfasst: 25.07.2006, 18:54
von oldInternetUser
Wenn ich den heutigen Tag in die obige Formel einsetze und direkt vor dem switch per alert(diff) den Wert ausgebe, wird 0 ausgegeben. Wird anschließend auf Zahl (case 0:) geprüft, gehen FireFix/Netscape fehlerhaft in den else-Zweig.

Deshalb ist die einzigste bei mir funktionierende Lösung:

Code: Alles auswählen

var diff = String&#40; obiges &#41;

unten dann

case "0"&#58;