kevinwiedener: Javascript Netscape anpassen (aktuelle Woche)

Dieses Skript läuft bei mir leider nur unter dem Internet Explorer. Kann es jemand fit für den Netscape machen?

Vielen Dank für eure Hilfe

Skript zur Bestimmung der aktuellen Woche:

var thisWeek=" "
function getWeek()
{
var cTime=new Date()
var sYear=new Date(cTime.getYear(),0,1)
sYear=sYear.getTime()-(sYear.getDay()-1)*(24*60*60*1000)
var cWeek=Math.ceil((cTime.getTime()-sYear)/(7*24*60*60*1000))-1
return(cWeek)
}
document.write("<B> Die aktuelle Woche: </B>" + getWeek(thisWeek))

Kevin

  1. Hi,

    Dieses Skript läuft bei mir leider nur unter dem Internet Explorer. Kann es jemand fit für den Netscape machen?

    das heißt, unter Netscape "läuft es nicht", richtig? "Läuft nicht" läuft nicht. Fehlerbeschreibung, bitte.

    var cTime=new Date()
    var sYear=new Date(cTime.getYear(),0,1)

    Hach, ja. Der alte IE-Bug, bei Jahren ab 2000 getYear() das falsche Resultat liefern zu lassen. Richtig wäre dieses Jahr 102, der IE meldet aber defekterdings 2002. Schau mal in http://selfhtml.teamone.de/javascript/objekte/date.htm nach, was es statt dessen für Methoden geben könnte.

    Cheatah

    1. Das kapier ich jetzt nicht ganz.

      Also, die Fehlermeldung ist folgende:

      Während beim IE 17 rauskommt, kommt beim Netscape (6) 99154 raus!

      Ich wär heilfroh, wenn jemand den "falschen" Code richtig umschreiben könnte.

      Danke

      Kevin

      1. Hi,

        Das kapier ich jetzt nicht ganz.

        wo genau hast Du denn Probleme?

        Während beim IE 17 rauskommt, kommt beim Netscape (6) 99154 raus!

        Lass Dir doch mal das Jahr, welches Du in Dein zweites new Date() fütterst, mit alert() ausgeben. Der Fehler liegt übrigens beim IE, nicht bei Netscape.

        Cheatah

        1. Ok, machen wirs ganz einfach.

          Gibts eine einfach Möglichkeit, die aktuelle Woche für den IE und Netscape gemeinsam zu bestimmen?

          Kevin

          1. Hi,

            Ok, machen wirs ganz einfach.

            einverstanden.

            Gibts eine einfach Möglichkeit, die aktuelle Woche für den IE und Netscape gemeinsam zu bestimmen?

            Ja.

            Cheatah

            P.S.: Wo Du sie findest, habe ich gleich in der ersten Antwort gesagt. Leider ist die Beschreibung von getYear() fehlerhaft; ich habe Stefan gerade einen Bugreport geschrieben. Vielleicht hilft es Dir trotzdem zu wissen, dass der IE Dir die Wochen von (exakt!) 1900 Jahren unterschlägt.

            1. Hallo Cheatah

              P.S.: Wo Du sie findest, habe ich gleich in der ersten Antwort gesagt. Leider ist die Beschreibung von getYear() fehlerhaft; ich habe Stefan gerade einen Bugreport geschrieben. Vielleicht hilft es Dir trotzdem zu wissen, dass der IE Dir die Wochen von (exakt!) 1900 Jahren unterschlägt.

              Darüber läßt sich ganz gewiß streiten. Soweit ich aus der Doku erkennen kann, wurde beim Versionssprung zur JavaScriptversion 1.3. an der Funktionalität geschraubt.

              Netscape-Doku:

              JavaScript 1.2 and earlier versions. The getYear method returns either a 2-digit or 4-digit year:

              For years between and including 1900 and 1999, the value returned by getYear is the year minus 1900. For example, if the year is 1976, the value returned is 76.

              For years less than 1900 or greater than 1999, the value returned by getYear is the four-digit year. For example, if the year is 1856, the value returned is 1856. If the year is 2026, the value returned is 2026.

              Der IE verhält sich hier entsprechend der bis JavaScript1.2 geltenden Funktionalität.

              Ähnliche Versionssprünge gibt es ja z.B. auch bei der Methode push(). Hier liefert unter JavaScript1.2 die Methode den Wert des angefügten Elementes zurück und unter JavaScript1.3 die neue Länge des Arrays.

              Teste das folgende bitte mal unter NN4 und NN6

              <script type="text/javascript"  language="JavaScript1.2">
              <!--
              datum=new Date(2002,1,1)
              alert("JS Version 1.2 erwartet 2002: " + datum.getYear())

              feld=new Array(1,2,3,4)
              alert("JS Version 1.2 erwartet a: " + feld.push("a"))

              //-->
              </script>
              <script type="text/javascript" language="JavaScript1.3">
              <!--
              datum=new Date(2002,1,1)
              alert("JS Version 1.3 erwartet 102: " + datum.getYear())

              feld=new Array(1,2,3,4)
              alert("JS Version 1.3 erwartet 5: " + feld.push("a"))

              //-->
              </script>

              Beim Array verhält sich Netscape 4 regelgerecht, er gibt unter JavaScript1.2 das Element aus und unter JavaScript1.3 die Länge des Arrays.

              Bei der Methode getYear() allerdings nicht. Hier sind keine Unterschiede festzustellen.

              Netscape 6 dagegen verhält sich wie lt. Doku vorgesehen und gibt die erwarteten Werte zurück.

              Ich will ja nicht bösartig sein, aber ich denke mal, dass die Programmierer von Netscape 4 einfach geschlafen haben und die Methode fehlerhaft implementiert haben. Also wurde mit Version 1.3 einfach getFullYear hinzugenommen und der Fehler als Feature deklariert :-)

              Viele Grüße

              Antje

              1. Argh,

                ich danke Euch beiden.

                Ihr hattet doch beide Recht, dass Nachlesen was hilft.

                Der Fehler war ja ziemlich simpel in meinem Quelltext.

                Anstatt cTime.getYear habe ich einfach cTime.getFullYear geschrieben und schon war das Problem gelöst.

                Das is wohl Blödheit ;-)

                Danke Euch beiden für Eure aufopfernde Hilfe

                Kevin

                1. Hi,

                  Ihr hattet doch beide Recht, dass Nachlesen was hilft.

                  dann hat's was genützt :-)

                  Das is wohl Blödheit ;-)

                  Nein, Unkenntnis. Bitte schreib Dich nicht als blöd ab, nur weil Du nicht alles weißt. Es gibt in der Internet-Technologie (was immer das sein mag) _verdammt_ viel zu lernen - nur wenige Themen, mit denen sich Otto-Normalverbraucher beschäftigt, sind komplexer.

                  Cheatah

              2. Hi,

                Darüber läßt sich ganz gewiß streiten. Soweit ich aus der Doku erkennen kann, wurde beim Versionssprung zur JavaScriptversion 1.3. an der Funktionalität geschraubt.

                ja - aber schon davor gab es Unterschiede:

                http://developer.netscape.com/viewsource/goodman_2k.html
                """
                The getYear() method, however, is a can of worms, [...]; getYear() changed its behavior between Navigator 2 and 3.

                In Navigator 2, getYear() returns an integer value of a date object's year minus 1900. [...]

                Starting with Navigator 3, however, the value returned by getYear() changes for dates other than those in the 1900s. [Weitere Beschreibung hier s. von Dir zitierte Doku.]

                One of the by-products of the ECMAScript effort (as written in the ECMA-262 [http://www.ecma.ch/stand/ecma-262.htm] standard) is a more Y2K-friendly Date object. [...] It did so by defining getYear() and setYear() as they existed in Navigator 2.
                """

                Soll heißen: Die Interpretation in Netscape 3 wurde als fehlerhaft erkannt und rückgängig gemacht. Ich halte es nicht für falsch, dieses Chaos nicht durch "künstliche Abwärtskompatibilität" in einem <script language="JavaScript1.2"> aufrechtzuerhalten. Bei push() sieht die Sache anders aus: Hier wurde ein zuvor sinnvolles Verhalten durch ein unterschiedliches, aber ebenfalls sinnvolles Verhalten ausgetauscht, nicht ein (durch Unbedachtheit entstandener) Bug entfernt.

                Der IE verhält sich hier entsprechend der bis JavaScript1.2 geltenden Funktionalität.

                _In_ JavaScript 1.2, nicht _bis_ :-)

                Netscape 6 dagegen verhält sich wie lt. Doku vorgesehen und gibt die erwarteten Werte zurück.

                Das finde ich ausnahmsweise sehr schade. Hast Du das gleiche mal mit "JavaScript1.0" probiert? Ich habe hier leider keinen Netscape 6 installiert, kann es also nicht testen.

                Also wurde mit Version 1.3 einfach getFullYear hinzugenommen und der Fehler als Feature deklariert :-)

                Nein, das vorherige Feature als Fehler erkannt ;-) Du hast aber recht, man kann drüber streiten. Ich halte die ursprüngliche und jetzige Definition für richtig und jede andere für unsinnig und fehlerprovozierend - wie kevinwiedener auch gemerkt hat, ohne es zu merken *g*

                Cheatah