js gibt mir n falschen wochentag?
Sorgenkind mech
- javascript
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
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
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
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
nochmals danke für die nachträgliche erklärung
the mech | code:nc01
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
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