Gabriel Vögler: Jahr 2000 Bug bei Date()

ich habe Probleme mit der Klasse Date(), speziell der Methode getYear(). Netscape 4.6 liefert mir 98, 99, 100 101 während IE 5.0 98, 99, 2000, 2001 liefert. Ist jemanden das Problem bekannt? Wie kann ich meine Datenbearbeitung konsistent halten ohne den Browser-Namen abfragen zu müssen?

  1. Hi!

    Mit diesem Problem habe ich mich noch nicht befasst, würde es aber, die Richtigkeit deiner Angaben vorausgesetzt, folgendermassen lösen:

    if (Jahr<2000) Jahr = Jahr + 1900;

    Joseph

    1. Mit diesem Problem habe ich mich noch nicht befasst, würde es aber, die Richtigkeit deiner Angaben vorausgesetzt, folgendermassen lösen:

      if (Jahr<2000) Jahr = Jahr + 1900;

      Hallo Joseph,

      Herzlich willkommen im Jahr 3899 <veg>.
      Man muss bei sowas hoellisch aufpassen, da einem sonst Browser, die die Jahreszahlen schon korrekt (YYYY) darstellen heftigsten Duennsinn anzeigen koennen. Ich wuerde eher mittels einer Konversion zu einem String versuchen zu evaluieren, ob ich hier gerade mit einem zwei- oder dreistelligen Jahr kaempfe und dann 1900 zu addieren, als pauschal bei allem, was unter 2000 liegt einfach 1900 zu addieren.

      Das koennte dann etwa so aussehen:
      <Sample>
      var strJahr = String(Jahr)
      if ( strJahr.length < 4)
      {
          Jahr = Jahr + 1900;
      }
      </Sample>
      Damit ist man naemlich dann auf der sicheren Seite.

      Bis danndann

      Michael N.

      1. Hi!

        Man muss bei sowas hoellisch aufpassen, da einem sonst Browser, die die Jahreszahlen schon korrekt (YYYY) darstellen heftigsten Duennsinn anzeigen koennen.

        Korrekt ist, dass getYear() die Anzahl der Jahre seit 1900 zurueckliefert, so wie es Netscape seit JS1.3 macht. Bis dahin war es genauso wie bei IE, naemlich zweistellige Jahreszahl bis 1999 und ab 2000 alle vier Ziffern. Dass das nicht viel Sinn macht, duerfte einleuchten.

        Um immer die 4-stellige Jahreszahl zu bekommen, gibt es die Funktion getFullYear(). Hier bin ich mir nicht sicher, seit welcher JS-Version.

        Das koennte dann etwa so aussehen:
        <Sample>
        var strJahr = String(Jahr)
        if ( strJahr.length < 4)
        {
            Jahr = Jahr + 1900;
        }
        </Sample>

        Dasselbe in kurz:
        if (jahr < 1000) jahr += 1900;

        Damit ist man naemlich dann auf der sicheren Seite.

        Ja, bis 2899.

        Bye, Calocybe

      2. Hallo Michael N.

        dann eben

        if (Jahr>99 && Jahr<2000) Jahr = Jahr + 1900;

        zufrieden?

        Hey, wenn du so akribisch Java programmierst, vielleicht findest du den Grund auf meiner Seite <www.baulift.de/g3001.html> warum sich Netscape verabschiedet.
        Die Skripte habe ich nochmal in <www.baulift.de/scripts.html> gelegt.

        Joseph

  2. Hi Gabriel!

    if (Year > 99 && Year < 2000){
              Year = Year + 1900;
              }

    Das sollte ca. bis zum Jahr 3900 halten, wenn
    der Netscape 4.6 einfach weiterzählt.
    <g>

    Gruß an alle die mich kennen oder noch kennen lernen!
    Wilm

    1. Hi Gabriel!

      if (Year > 99 && Year < 2000){
                Year = Year + 1900;
                }

      Das sollte ca. bis zum Jahr 3900 halten, wenn
      der Netscape 4.6 einfach weiterzählt.
      <g>

      Gruß an alle die mich kennen oder noch kennen lernen!
      Wilm

      Hallo Wilm,

      Also ich habe gehört, im Spätsommer 3899 soll es den NC 5.0 geben. Der hat dann diese Problematik nicht mehr! Ist aber aus unbestätigter Quelle!
      ;-))))

      GAA Thorhall

      1. Hallo Thorhall

        Also ich habe gehört, im Spätsommer 3899 soll es den NC 5.0 geben. Der hat dann diese Problematik nicht mehr! Ist aber aus unbestätigter Quelle!

        Eine menge der "alten" Programmierer haben auch gedacht. ihre Programme hätten bis zum Jahre 2000 ihre Schuldigkeit getan, man sollte aus der Geschichte lernen!

        Cu im Chat?

        Wilm

        1. Hallo Thorhall

          Also ich habe gehört, im Spätsommer 3899 soll es den NC 5.0 geben. Der hat dann diese Problematik nicht mehr! Ist aber aus unbestätigter Quelle!

          Eine menge der "alten" Programmierer haben auch gedacht. ihre Programme hätten bis zum Jahre 2000 ihre Schuldigkeit getan, man sollte aus der Geschichte lernen!

          Cu im Chat?

          Wilm

          I will es heute abend auf all Fälle mal versuchen :-)

          GAA Thorhall

  3. Hallo!

    Benutze statt getYear() einfach 1970+(getYear()-70)%100. Funktioniert bis 2069.

    Gruß
    Steffen