Jo: Datum kontrollierbar mit dieser Funktion?

Hallöli,

kann mir vielleicht jemand helfen??
Ich binde irgendwie folgenden Code in die darunterstehende Funktion falsch ein. Der Code ist als Ergänzung gedacht, er überprüft die Eingabe auf ihre Richtigkeit und erst dann wird der Wochentag erzeugt.

Danke!

Code:
var Jetzt = new Date(tag);
      if (isNaN(Number(Jetzt)))
      {ReturnValue = ReturnValue + "Fehler im Eingabefeld "" + document.thueForm.tag + "" (kein Datumswert)\n";

Funktion:
function SagDat()
 {
  var Jetzt = new Date();
  var Tag = Jetzt.getDate();
  var Monat = Jetzt.getMonth() + 1;
  var Jahr = Jetzt.getYear();
  document.thueForm.tag.value = Tag ;
  document.thueForm.mon.value = Monat ;
  document.thueForm.jah.value = Jahr ;
  SagTag(Tag,Monat,Jahr);
 }
  function SagTag(tag,mon,jah)
   {var jetzt = new Date(jah,mon,tag);
    var WochenTag = new
    Array (Freitag","Samstag","Sonntag","Montag","Dienstag","Mittwoch","Donnerstag");
    document.thueForm.Wochentag.value = WochenTag[jetzt.getDay()]
  }
   }

Jo

  1. Entschuldige, aber dein Code kann nicht korrekt funktionieren. Ganz bestimmt nicht.
    Das Array beginnst du mit Freitag. Freitag bestitzt zudem kein beginnendes Anführungszeichen, so kann es gar nicht gehn.
    Wochentage beginnen mit 0 für Sonntag bis 6 für Samstag siehe http://selfhtml.teamone.de/javascript/objekte/date.htm#get_day
    Zudem übergibst du der Funktion SagTag den Monat, so wie er als wirkliches Datum gehört, aber unter javascript beginnt der Monat mit 0 an zu zählen. So erzeugt dir var jetzt ein Datum einen Monat in der Zukunft. Du musst davon wieder 1 abziehen um korrekt zu sein
    .
    Ich habe folgende kleine HTML-Datei erzeugt, die genau das macht, was du anscheinend willst.

    <html><head><title>Test</title></head>
    <body>
    <script type="text/javascript">
    <!--

    function SagDat(tag, mon, jahr) {
        var Jetzt = new Date(jahr,mon-1,tag);
        var ReturnValue='';
        if (isNaN(Number(Jetzt))) {
            ReturnValue = ReturnValue + "Fehler im Eingabefeld: " + tag + '.'+ mon + '.' + jahr + " ist kein Datumswert\n";
        }else{
            var Tag = Jetzt.getDate();
            var Monat = Jetzt.getMonth() + 1;
            var Jahr = Jetzt.getYear()+1900;
            document.thueForm.tag.value = Tag ;
            document.thueForm.mon.value = Monat ;
            document.thueForm.jah.value = Jahr ;
            SagTag(Tag,Monat,Jahr);
        }
        if (ReturnValue != '') {
            document.getElementById("test").firstChild.nodeValue=ReturnValue;
            document.getElementById("wochentag").firstChild.nodeValue = ' ';
        }else{
            document.getElementById("test").firstChild.nodeValue=' ';
        }
    }
    function SagTag(tag,mon,jah) {
        var jetzt = new Date(jah,mon-1,tag);
        var WochenTag = new Array ("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
        document.getElementById("wochentag").firstChild.nodeValue = WochenTag[jetzt.getDay()]
    }
    //-->
    </script>
    </body>
    <form name="thueForm" action="">
    <TABLE>
    <TR><TD colspan=3">Bitte geben Sie ein Datum an</td></tr>
    <TR><TD>Tag:</td><TD>Monat:</td><TD>Jahr:</td></tr>
    <TR><TD><input type="text" name="tag" value="Tag"></td><td>
    <input type="text" name="mon" value="Monat"></td><td>
    <input type="text" name="jah" value="Jahr"></td></tr>
    </table>
    <p ID="wochentag"> <BR />
    <p ID="test"> <BR />
    </form>
    <A HREF="#" ONCLICK="SagDat(document.thueForm.tag.value,document.thueForm.mon.value,document.thueForm.jah.value)">Wochentag anzeigen</A>
    </html>

    Ich hoffe dies hilft dir nun weiter.

    mit freundlichen Grüßen

    Gerd

    1. Entschuldige, aber dein Code kann nicht korrekt funktionieren. Ganz bestimmt nicht.

      Er hat aber funktioniert.

      Trotzdem danke für deinen code.
      musst nur die 1900 rausnehmen, da er 2002 immer in 3902 umgerechnet hat.

      joan

      1. Entschuldige, aber dein Code kann nicht korrekt funktionieren. Ganz bestimmt nicht.
        Er hat aber funktioniert.

        Trotzdem danke für deinen code.
        musst nur die 1900 rausnehmen, da er 2002 immer in 3902 umgerechnet hat.

        joan

        Oje, oje, oje,

        Unter dem Internet Explorer hast du recht der verwertet tatsächlich das richtige Jahr.
        Aber Mozilla bzw. Netscape 6 geben immer Jahr-1900 zurück. Diese Browser würden 102 für das Jahr zurückgeben. (so ist es normalerweise unter unix/linux und perl üblich)

        Ich hab es gerade unter dem IE nachgetestet.
        Möglicherweise musst du eine Fallunterscheidung machen ob jemand IE oder Netscape verwendet.

        mit freundlichen Grüßen

        Gerd

        1. Möglicherweise musst du eine Fallunterscheidung machen ob jemand IE oder Netscape verwendet.

          Und wie mach ich das?

          Gruss, Jo

          1. Möglicherweise musst du eine Fallunterscheidung machen ob jemand IE oder Netscape verwendet.
            Und wie mach ich das?

            Gruss, Jo

            In deinem Fall ganz einfach:
            Du überprüfst ob das Jahr > als 999 ist. Wenn ja, weist du es ist das aktuelle Jahr und somit der IE.
            Wenn Jahr<999 dann musst du halt 1900 dazuzählen, und du kannst dir denken, das es sich um Netscape 6 bzw. Mozilla handelt.

            mit freundlichen Grüßen

            Gerd

            1. Hallo,

              Du überprüfst ob das Jahr > als 999 ist. Wenn ja, weist du es ist das aktuelle Jahr und somit der IE.
              Wenn Jahr<999 dann musst du halt 1900 dazuzählen, und du kannst dir denken, das es sich um Netscape 6 bzw. Mozilla handelt.

              Oder du setzt einfach die Methode getFullYear() ein und ersparst dir ne Menge Arbeit;), wo wir auch schon bei der zweiten Problemlösung wären, denn es darf an den Date-Constructor bzw. der Constructor-Funktion, welche ein Datumsobjekt zurückliefert, keine zweistellige Jahreszahl übergeben werden, sprich

              var jetzt = new Date(jah,mon,tag);
              <

              ist falsch, sofern jah keine vierstellige Jahreszahl darstellt. Was aber bei getFullYear() der Fall ist.

              karl