Javascript Ausgabe in Mozilla und im IE
Raggy
- javascript
0 Beat0 Raggy0 Beat0 Der Martin
0 botl1k30 Der Martin
Hallo!
Weiß jemand, wieso folgender Text (javascript) im Mozilla korrekt ausgegeben wird ("meine Homepage wurde vor 3 Tagen erstellt") aber im IE falsch ("Meine Homepage wurde vor NaN Tagen erstellt") und wie man das ändern kann? Wäre für eine Lösung sehr dankbar!!
Liebe Grüße
Hier der text aus der Javascript datei:
function daysleft()
{
today = new Date()
msPerDay = 24 * 60 * 60 * 1000
pageCreated = new Date("5, 22, 2008")
// pageCreated.setYear(today.getYear())
daysSince = (today.getTime() - pageCreated.getTime()) / msPerDay;
daysSince = Math.round(daysSince)
daystr = daysSince < 2 ? " Tag erstellt." : " Tagen erstellt.";
document.write("Meine Homepage wurde vor " + daysSince + daystr + "");
}
Der Validiktator deiner Wahl ist dein bester Freund.
Eventuell ist es gut, derweil man validiktiert, den Google Scheiss rausszuschmeissen.
Weitere irreführende Hinweise gebe ich nur gegen Bezahlung.
mfg Beat
ok ich setzt dann mal die semikolons...
dazu muss ich sagen dass dieses javascript nicht von mir stammt sondern kostenlos zum download bereit stand. Ich kenn mich doch mit javascript nicht aus! ;-)
@martin: welche kontrollausgabe?
Ja das datumsvormat muss stimmen, das habe ich getestet und wird, zumindest im mozilla, korrekt ausgegeben.
@beat: ?????? googlescheiß? hm hab ehrlich gesagt kein wort verstanden! nur dass du weitere auskünfte gegen bezahlung geben wirst :-D
Also! Die semikolons sind überall gesetzt nur geändert hat es nichts. Kann IE möglicherweise bestimmte dinge aus dem javascript nicht lesen?
Also irgendeinen grund muss es ja geben dass mozilla 3 tage liest und IE "NaN Tage"...
liebe grüße
@beat: ?????? googlescheiß? hm hab ehrlich gesagt kein wort verstanden! nur dass du weitere auskünfte gegen bezahlung geben wirst :-D
Invalides HTML kann unter Umständen bewirken, dass JavaScript nicht richtig läuft.
[http://validator.w3.org/check?uri=http%3A%2F%2Fraggys.de%2F&charset=%28detect+automatically%29&doctype=Inline&group=0]
Im Falle deines Scripts ist das zwar irrelevant, wie ich auf den zweiten Blick bemerkte.
Du hast in deinem Code noch diesen Schnippsel
<script type="text/javascript" z-index="10"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
Dieser code, der offenbar durch Google vorgeschlagen und von dir eingefügt wurde, ist invalide. Deshalb musst du ihn beim validieren entfernen. Danach kannst du ihn wieder einfügen.
mfg Beat
Sers
@martin: welche kontrollausgabe?
Na welche wohl? Zum Beispiel eine Ausgabe des erzeugten Date-Objekts pageCreated, das ich stark im Verdacht habe. Denn das Datumsformat, das du beim Erzeugen verwendest, passt auf keines der fünf angegebenen Schemata auf der SELFHTML-Seite, die ich dir schon verlinkt hatte. Ich behaupte daher mal ganz kühn, dass der IE hier beim Erzeugen des Date-Objekt aus diesem strubbeligen Datumsstring schon scheitert.
ich weiß nicht, wie ich eine kontrollausgabe mache. Bin auch deinem link gefolgt und hab nichts mit alert anfangen können
Habe deinen Link überlesen, jetzt nachgeschaut und das passendste datumsformat (Jahr, Monat, Tag) genommen. Nun zeigt IE auch was an: beide browser geben -27 Tage aus.
Ja das datumsvormat muss stimmen
Was heißt "muss stimmen"? Woher nimmst du die Gewissheit? Hast du's überprüft?
die gewissheit nahm ich aus dem mozilla browser, s.u. Aber jetzt bin ich schlauer :-)
das habe ich getestet und wird, zumindest im mozilla, korrekt ausgegeben.
Das muss in diesem Fall nichts heißen; dass der FF/Moz alles wie gewünscht auswerten kann, wissen wir ja.
ist ja lustig, der denkt sich das javascript auf die logischste erklärung einfach um? hehe
@beat: ?????? googlescheiß?
Ja, das Google-Statistik-Gerümpel.
Ich kenne kein google-statistik-gerümpel. Aber jetzt weiß ich, worauf du das beziehst, ich dachte du siehst im Javascript irgendwas von google. Nein die Statistik auf meiner homepage hat nichts mit google zu tun! Von google ist nur das GoogleAdSense, die werbung darüber, um evtl minimale einnahmen zu erziehlen. Aber das sei jetzt nicht diskussionsthema.
hm hab ehrlich gesagt kein wort verstanden! nur dass du weitere auskünfte gegen bezahlung geben wirst :-D
Und er gab dir den guten Tipp, die Validität deines Quellcodes zu überprüfen - und dem kann ich mir nur anschließen. Da gibt's noch einige sehr unschöne Fehler, z.B. ungültige HTML-Attribute.
Thema HTML-Attribute: Was haben die eigentlich noch alle da zu suchen, obwohl du doch ein Stylesheet einbindest, also definitiv um den Sinn von CSS weißt?
Oh ich habe keine Ahnung was validität heißt aber nachdem ich entdeckt habe, dass ihr hier links einfügt habe ich das mal gemacht und alle 51 fehler eliminiert. Ok wieder etwas schlauer geworden :-) ist ja ne echt gute hilfe, diese seite!
Das hatte nun zur Folge, dass Mozilla mir 4 Tage ausgibt (zwar einer zu viel, aber das lässt sich schnell ändern) aber IE immernoch -27. Wir nähern uns dem Ziel! :-)
Zum Thema HTML-Attribute: Ich hatte das Problem, dass die Grafik, die ich im Hintergrund habe, ständig abgeschnitten wurde. Ich hatte alles versucht, was ging. Nun hatte mir jemand diese Lösung gegeben, die auch endlich mal so funktioniert, wie ich es wollte. Deshalb ändere ich ungern noch groß was. Aber du hast recht, wenn alles andere stimmt, schreib ich das in die css um (ich hoffe, tabellen lassen sich auch im css definieren)
Im übrigen führt dein Link "Kontakt/Impressum" ins Leere (404 Not Found), dabei sollte das Impressum eine der ersten Seiten einer öffentlich erreichbaren Webpräsenz sein!
Bis jetzt führen alle Links ins leere. Das wird auch die erste Seite sein, die erreichbar sein wird, aber erstmal muss das Grundgerüst stehen. Und daran arbeite ich ja gerade. Wenn das Grundgerüst steht, kümmere ich mich um den Inhalt der einzelnen seiten.
Also irgendeinen grund muss es ja geben dass mozilla 3 tage liest und IE "NaN Tage"...
Eben, und das solltest du überprüfen.
Schönen Sonntag noch,
Martin
danke für die hilfreichen tips!
Hallo nochmal,
@martin: welche kontrollausgabe?
Na welche wohl? Zum Beispiel eine Ausgabe des erzeugten Date-Objekts pageCreated, das ich stark im Verdacht habe. Denn das Datumsformat, das du beim Erzeugen verwendest, passt auf keines der fünf angegebenen Schemata auf der SELFHTML-Seite, die ich dir schon verlinkt hatte. Ich behaupte daher mal ganz kühn, dass der IE hier beim Erzeugen des Date-Objekt aus diesem strubbeligen Datumsstring schon scheitert.und genau das habe ich interessehalber mal selbst überprüft:
<script type="text/javascript">
var d = new Date("5, 22, 2008");
alert(k)
</script>Dieses Script produziert bei mir im IE schon die Ausgabe "NaN", im alten Firefox 1.x (habe gerade keinen aktuellen zur Hand) die Ausgabe "Invalid Date". Mein Verdacht war also richtig. Opera gibt sich zwar alle Mühe, aus dem verkorksten String *irgendwas* zu interpretieren, kriegt aber nicht den 22.Mai heraus, sondern den 05.Mai, 22 Uhr.
Sobald man einen gültigen Datumsstring oder ein numerisches Datum übergibt, ist die Ausgabe beispielsweise "Thu May 22 00:00:00 UTC+0200 2008".
Habe nun (Jahr, Monat, Tag) Das müsste doch passen oder? Die drei sind ja die einzigen relevanten Werte, die ich übergeben will. hab dann quasi pageCreated = new Date(2008, 5, 22);
Ja das datumsvormat muss stimmen
Was heißt "muss stimmen"? Woher nimmst du die Gewissheit? Hast du's überprüft?Offensichtlich nicht. Zumindest nicht im IE.
Das war meine fälschliche Annahme weil Mozilla mir die korrekte Tagesanzahl angezeigt hat. Jetzt weiß ichs ja besser :-)
Schönen Sonntag noch,
Martin
@beat: ?????? googlescheiß? hm hab ehrlich gesagt kein wort verstanden! nur dass du weitere auskünfte gegen bezahlung geben wirst :-D
Invalides HTML kann unter Umständen bewirken, dass JavaScript nicht richtig läuft.
[http://validator.w3.org/check?uri=http%3A%2F%2Fraggys.de%2F&charset=%28detect+automatically%29&doctype=Inline&group=0]
Hab ich gemerkt, nachdem ich alle fehler beseitigt hatte, hat mozilla wieder eine gültige Tagesanzahl gegeben :-) (IE immernoch nicht leider)
Im Falle deines Scripts ist das zwar irrelevant, wie ich auf den zweiten Blick bemerkte.
Du hast in deinem Code noch diesen Schnippsel
<script type="text/javascript" z-index="10"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
> Dieser code, der offenbar durch Google vorgeschlagen und von dir eingefügt wurde, ist invalide. Deshalb musst du ihn beim validieren entfernen. Danach kannst du ihn wieder einfügen.
>
> mfg Beat
beim validieren wurde mir kein fehler diesbezüglich angezeigt. Den z-index hab ich natürlich wieder rausgenommen (der war invalide!!), den hatte ich nur eingefügt, weil der google-skyscraper anfangs nicht angezeigt wurde, also hatte ich einfach was ausprobiert und vergessen, das wieder rückgängig zu machen :-)
Sooo aktueller Stand ist also: Mozilla zeigt 4 Tage an (offline seite aber auch -27) und IE zeigt ebenfalls -27 an.
Die Berechnung
msPerDay = 24 \* 60 \* 60 \* 1000;
daysSince = (today.getTime() - pageCreated.getTime()) / msPerDay;
daysSince = Math.round(daysSince);
müsste ja eigentlich stimmen, wenn getTime Die Zeit in Millisekunden ausgibt..
liebe grüße
Nein da stimmt was nicht: IE zeigt auch im Offline (also wenn ich die html datei von meiner festplatte öffne) -27 an, online aber nach wie vor NaN!!
Mozilla off -27, on +4
Gruß
Nein da stimmt was nicht: IE zeigt auch im Offline (also wenn ich die html datei von meiner festplatte öffne) -27 an, online aber nach wie vor NaN!!
Mozilla off -27, on +4Gruß
und wenn ich nun eine neue variable deklariere
var daysNe = Math.round(daysSince);
var daystr = daysNe < 2 ? " Tag erstellt." : " Tagen erstellt.";
kommt IE auch nicht mehr durcheinander (vorher war daysSince = Math.round(daysSince) )
Und es wird in allen versionen -27 angezeigt, also kein "NaN" mehr. Jetzt scheint es nur noch ein mathematisches Problem zu sein, oder?
edit: Juhuu ich habs rausgefunden! Also Javascript liest den Monat von 0 an, das heißt Mai ist nicht "5" sondern "4". Damit klappt die Anzeige jetzt sowohl im Moz als auch im IE. Dass 4 Tage statt korrekterweise 3 Tage ngezeigt wird, könnte daran liegen, dass ab dem 22. um 0 Uhr gerechnet wird, also der 22. mitgezählt wird. Werde dann einfach den 21. eintragen oder bei der Berechnung 1 abziehen.
Fette sache! Danke für eure Hilfe! Ich denk mal das validieren bzw. debuggen hat schon einiges gebracht und besonders das datumsformat im newDate
Vielen Dank!
edit: Juhuu ich habs rausgefunden! Also Javascript liest den Monat von 0 an, das heißt Mai ist nicht "5" sondern "4".
Das stimmt im Prinzip, aber du kannst beim erzeugen des Date Objekt eine Form anwenden, bei der das nicht so ist. Du musst nicht explizit die getTime() Methode aufrufen und natürlich kannst du ein paar Operationen zusammenfassen und Math.round() ist völlig fehl am Platz:
function daysleft() {
var today = new Date();
var msPerDay = 24 * 60 * 60 * 1000;
var pageCreated = new Date("5/22/2008");
var daysSince = parseInt((today - pageCreated) / msPerDay);
document.write("Meine Homepage wurde vor " + daysSince + (daysSince < 2 ? " Tag erstellt." : " Tagen erstellt."));
}
Struppi.
Du musst nicht explizit die getTime() Methode aufrufen und natürlich kannst du ein paar Operationen zusammenfassen und Math.round() ist völlig fehl am Platz:
function daysleft() {...}
>
> Struppi.
Tatsache! Das funktioniert mindestens genauso gut und sieht noch besser aus. Vielen Dank!
Moin,
ok ich setzt dann mal die semikolons...
der Ordnung halber ist das mal gut so. Javascript kommt zwar *meistens* auch ohne Semikolon aus; das Ende einer Anweisung ist aber nicht immr eindeutig.
@martin: welche kontrollausgabe?
Na welche wohl? Zum Beispiel eine Ausgabe des erzeugten Date-Objekts pageCreated, das ich stark im Verdacht habe. Denn das Datumsformat, das du beim Erzeugen verwendest, passt auf keines der fünf angegebenen Schemata auf der SELFHTML-Seite, die ich dir schon verlinkt hatte. Ich behaupte daher mal ganz kühn, dass der IE hier beim Erzeugen des Date-Objekt aus diesem strubbeligen Datumsstring schon scheitert.
Ja das datumsvormat muss stimmen
Was heißt "muss stimmen"? Woher nimmst du die Gewissheit? Hast du's überprüft?
das habe ich getestet und wird, zumindest im mozilla, korrekt ausgegeben.
Das muss in diesem Fall nichts heißen; dass der FF/Moz alles wie gewünscht auswerten kann, wissen wir ja.
@beat: ?????? googlescheiß?
Ja, das Google-Statistik-Gerümpel.
hm hab ehrlich gesagt kein wort verstanden! nur dass du weitere auskünfte gegen bezahlung geben wirst :-D
Und er gab dir den guten Tipp, die Validität deines Quellcodes zu überprüfen - und dem kann ich mir nur anschließen. Da gibt's noch einige sehr unschöne Fehler, z.B. ungültige HTML-Attribute.
Thema HTML-Attribute: Was haben die eigentlich noch alle da zu suchen, obwohl du doch ein Stylesheet einbindest, also definitiv um den Sinn von CSS weißt?
Im übrigen führt dein Link "Kontakt/Impressum" ins Leere (404 Not Found), dabei sollte das Impressum eine der ersten Seiten einer öffentlich erreichbaren Webpräsenz sein!
Also irgendeinen grund muss es ja geben dass mozilla 3 tage liest und IE "NaN Tage"...
Eben, und das solltest du überprüfen.
Schönen Sonntag noch,
Martin
Hallo nochmal,
@martin: welche kontrollausgabe?
Na welche wohl? Zum Beispiel eine Ausgabe des erzeugten Date-Objekts pageCreated, das ich stark im Verdacht habe. Denn das Datumsformat, das du beim Erzeugen verwendest, passt auf keines der fünf angegebenen Schemata auf der SELFHTML-Seite, die ich dir schon verlinkt hatte. Ich behaupte daher mal ganz kühn, dass der IE hier beim Erzeugen des Date-Objekt aus diesem strubbeligen Datumsstring schon scheitert.
und genau das habe ich interessehalber mal selbst überprüft:
<script type="text/javascript">
var d = new Date("5, 22, 2008");
alert(k)
</script>
Dieses Script produziert bei mir im IE schon die Ausgabe "NaN", im alten Firefox 1.x (habe gerade keinen aktuellen zur Hand) die Ausgabe "Invalid Date". Mein Verdacht war also richtig. Opera gibt sich zwar alle Mühe, aus dem verkorksten String *irgendwas* zu interpretieren, kriegt aber nicht den 22.Mai heraus, sondern den 05.Mai, 22 Uhr.
Sobald man einen gültigen Datumsstring oder ein numerisches Datum übergibt, ist die Ausgabe beispielsweise "Thu May 22 00:00:00 UTC+0200 2008".
Ja das datumsvormat muss stimmen
Was heißt "muss stimmen"? Woher nimmst du die Gewissheit? Hast du's überprüft?
Offensichtlich nicht. Zumindest nicht im IE.
Schönen Sonntag noch,
Martin
Ist da ein System dahiner, wann du Semikolons setzt und wann nicht? *g*
Gruß
Hi,
Weiß jemand, wieso folgender Text (javascript) im Mozilla korrekt ausgegeben wird ("meine Homepage wurde vor 3 Tagen erstellt") aber im IE falsch ("Meine Homepage wurde vor NaN Tagen erstellt") und wie man das ändern kann?
am besten durch systematisches Vorgehen und sorgfältiges Debuggen.
function daysleft()
{
today = new Date()
msPerDay = 24 * 60 * 60 * 1000
Warum fehlen hier die Semikolons am Ende der Anweisungen?
pageCreated = new Date("5, 22, 2008")
Ein eigenartiges Datumsformat, findest du nicht auch? Hast du mal nachgeprüft, was nun wirklich in pageCreated steht? Was hat eine Kontrollausgabe ergeben?
daysSince = (today.getTime() - pageCreated.getTime()) / msPerDay;
daysSince = Math.round(daysSince)
Abgesehen davon, dass dir auch hier wieder ein Semikolon vorlorengegangen ist, wären diese Anweisungen korrekt. Das setzt natürlich voraus, dass sowohl today als auch pageCreated gültige Date-Objekte sind.
So long,
Martin