Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Kleines Javascript Problem

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
mark007q
PostRank 5
PostRank 5
Beiträge: 225
Registriert: 11.09.2005, 15:43
Wohnort: Bochum

Beitrag von mark007q » 24.07.2006, 18:22

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 !!!

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


oldInternetUser
PostRank 9
PostRank 9
Beiträge: 1250
Registriert: 19.03.2005, 12:52

Beitrag von oldInternetUser » 24.07.2006, 18:37

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.

mark007q
PostRank 5
PostRank 5
Beiträge: 225
Registriert: 11.09.2005, 15:43
Wohnort: Bochum

Beitrag von mark007q » 24.07.2006, 20:21

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?

oldInternetUser
PostRank 9
PostRank 9
Beiträge: 1250
Registriert: 19.03.2005, 12:52

Beitrag von oldInternetUser » 24.07.2006, 21:22

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.

haha
PostRank 9
PostRank 9
Beiträge: 1065
Registriert: 03.04.2006, 18:08
Wohnort: Bi Hamborg

Beitrag von haha » 24.07.2006, 21:47

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.

oldInternetUser
PostRank 9
PostRank 9
Beiträge: 1250
Registriert: 19.03.2005, 12:52

Beitrag von oldInternetUser » 24.07.2006, 21:52

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.

mark007q
PostRank 5
PostRank 5
Beiträge: 225
Registriert: 11.09.2005, 15:43
Wohnort: Bochum

Beitrag von mark007q » 24.07.2006, 22:14

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?

Anonymous

Beitrag von Anonymous » 24.07.2006, 23:59

text:
case "0":


zahl:
case 0:

:wink:

haha
PostRank 9
PostRank 9
Beiträge: 1065
Registriert: 03.04.2006, 18:08
Wohnort: Bi Hamborg

Beitrag von haha » 25.07.2006, 08:47

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 :)

mark007q
PostRank 5
PostRank 5
Beiträge: 225
Registriert: 11.09.2005, 15:43
Wohnort: Bochum

Beitrag von mark007q » 25.07.2006, 15:53

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.

oldInternetUser
PostRank 9
PostRank 9
Beiträge: 1250
Registriert: 19.03.2005, 12:52

Beitrag von oldInternetUser » 25.07.2006, 16:30

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?

mark007q
PostRank 5
PostRank 5
Beiträge: 225
Registriert: 11.09.2005, 15:43
Wohnort: Bochum

Beitrag von mark007q » 25.07.2006, 18:09

Funktioniert mit IE, FireFox, Opera ... mehr habe ich nicht getestet.

oldInternetUser
PostRank 9
PostRank 9
Beiträge: 1250
Registriert: 19.03.2005, 12:52

Beitrag von oldInternetUser » 25.07.2006, 18:54

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;

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag