Sorgenkind mech: js gibt mir n falschen wochentag?

moin
ich hab n terminkalender geschrieben funzt soweit super
allerdings basiert er auf dem heutigen tag, und von da aus werden alle anderen tage errechnet
das bedeutet zum beispiel wenn man eine woche weiter blättert wird der tag zum beispiel nur um 7 erhöht, denn halt geprüft ob sich dadurch monat und jahr verändern, blablabla
d.h. wenn heute donnerstag ist, dann ist der übergebene tag auch immer ein donnerstag

das problem ist nur, wenn ich jetz nach nem datum suche, dann muss zum beispiel wenn nach dem 17.07.2002 gesucht wird als parameter 18, 07 und 2002 übergeben werden
das bedeutet nun, dass ich rauskriegen muss, was der 17.07.2002 fürn wochentag ist, und dnn bis zum aktuellen wochentag rechnen, sodass als parameter zum beispiel heute 18, 07, und 2002 übergeben wird
ich habe versucht das folgendermaßen zu lösen:

suchtext=window.prompt("Bitte geben sie einen Suchtext ein:","");
if(suchtext!="")
{
tag=suchtext.slice(0,2);
mon=suchtext.slice(2,4);
jahr=suchtext.slice(4,8);
aktdatum=new Date();
akttag=aktdatum.getDay();
alert(akttag);
zdatum=new Date(jahr, mon, tag);
ztag=zdatum.getDay();
alert(ztag);
tag=Number(tag)-(Number(ztag)-Number(akttag));

und wenn ich jetz 17072002 eingebe, dann soll der angeblich samstag sein?

weiß jemand was ich falsch gemacht habe? wenn ja gib mir mal bitte jemand n tip

gruß

the mech | code:nc01

  1. Hi

    versuchs so:

    <script type="text/javascript">
    <!--

    suchtext=window.prompt("Bitte geben sie einen Suchtext ein:","");
    if(suchtext!="")
    {
    tag=suchtext.slice(0,2);
    mon=suchtext.slice(2,4);
    jahr=suchtext.slice(4,8);
    aktdatum=new Date();
    akttag=aktdatum.getDay();
    alert(akttag);

    zdatum=new Date();
    zdatum.setTime(Date.parse(mon+"/"+tag+"/"+jahr));

    ztag=zdatum.getDay();
    alert(ztag);
    tag=Number(tag)-(Number(ztag)-Number(akttag));
    }

    //-->
    </script>

    Gruss Christoph

    1. hey danke, funzt einwandfrei .......
      am besten wärs jetz natürlich wenn ich noch verstehen würde warum meins nich geklappt hat und warum das nu gerade klappt ......... aber naja, ich denke nich, dass ich da noch was ändern muss ;)

      dankbar the mech | code:nc01

      1. Hi

        hey danke, funzt einwandfrei .......

        Dann ist ja gut :-)

        am besten wärs jetz natürlich wenn ich noch verstehen würde warum meins nich geklappt hat und warum das nu gerade klappt ......... aber naja, ich denke nich, dass ich da noch was ändern muss ;)

        zdatum=new Date(jahr, mon, tag); <-- falsch
        Diese Funktion scheint nur zu gehen wenn so sachen wie: "March 10, 1998 22:48:00" drinnstehen.

        dankbar the mech | code:nc01

        np

        Christoph

        1. nochmals danke für die nachträgliche erklärung

          the mech | code:nc01

      2. Aloha!

        am besten wärs jetz natürlich wenn ich noch verstehen würde warum meins nich geklappt hat und warum das nu gerade klappt ......... aber naja, ich denke nich, dass ich da noch was ändern muss ;)

        Das Problem bei dir ist, daß du falsche Variablentypen übergeben hast:

        tag=suchtext.slice(0,2);  // tag ist String
        mon=suchtext.slice(2,4);  // mon ist String
        jahr=suchtext.slice(4,8); // jahr ist String
        [...]
        zdatum=new Date(jahr, mon, tag); //Hier werden Integer verlangt!
        ztag=zdatum.getDay();

        Du mußt also vor der Anwendung dir Variablen mit parseInt() in Zahlen verwandeln. Javascript wandelt die Typen nämlich nicht so passend, wie z.B. PHP oder Perl.

        Gut wäre also:
        tag=parseInt(suchtext.slice(0,2));  // tag ist Integer
        mon=parseInt(suchtext.slice(2,4));  // mon ist Integer
        jahr=parseInt(suchtext.slice(4,8)); // jahr ist Integer

        Und alles andere kann so bleiben.

        Merke: Wenn in Javascript falsche Werte rauskommen, liegt es meistens daran, daß die Variablen Strings sind, obwohl Integer (oder Float) erwartet werden. "1" + "1" ergibt "11" - logisch. 1 + 1 ergibt 2 - auch logisch. Aber a + a ergibt eben je nach Variablentyp entweder "11" oder 2, je nachdem, ob vorher a="1" oder a=1 definiert wurde.

        - Sven Rautenberg

        1. Hallo Sven

          Das Problem bei dir ist, daß du falsche Variablentypen übergeben hast:

          nein, nicht immer ist der Typ verantwortlich :-)

          mehr zur Typenumwandlung habe ich dir hier geschrieben

          http://forum.de.selfhtml.org/archiv/2002/7/16168/#m90794

          zdatum=new Date(jahr, mon, tag); //Hier werden Integer verlangt!
          ztag=zdatum.getDay();

          Integerwerte spielen hier keine Rolle.

          Die simple Ursache war: JavaScript beginnt die Zählung der Monate mit 0. Wird das Dateobjekt so erzeugt, so muss der Monat um eins verringert werden. Hier also mon-1 rechnen.

          Mech hat den Wochentag vom 17.August bestimmt und der ist tatsächlich ein Samstag.

          Mich hat hier eher die Frage interessiert, warum Christoph seine Lösung funktionierte.

          Der Unterschied zwischen beiden Lösungen bestand darin:

          Mech: new Date(jahr,monat,tag)
          Christoph: new Date("monat/tag/jahr")

          Christoph übergab einen fertigen vollständigen Datumsstring in einer gültigen Konvention.
          Mech übergab Werte, die erst in einen gültigen Datumsstring umgewandelt werden müssen.

          Diese Umwandlung erfolgt intern und da beginnt die Monatszählung bei 0. So zumindest meine Vermutung.

          Merke:

          ersetzen durch:

          Kommt bei Datumsberechnungen Unfug raus, so prüfe ob deine Monatszählung bei 0 beginnt.

          Viele Grüße

          Antje