ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
350
350
EMPFEHLEN
-
14.11.09 17:36 #1
- Registriert seit
- Nov 2009
- Beiträge
- 7
Moin!
Folgendes (hierzu mal abgespecktes) Script verliert das errechnete Datum "datum_anfang". Warum / Was mache ich falsch ?
Zweck:
Ein Datum aus Formular soll auf gültigen Zeitraum überprüft werden. Der gültie Zeitraum ist von >heute+2 Tage< bis >heute+35 Monate<. Um die >2 Tage< wird datum_anfang hochgezählt. Um die >35 Monate< wird datum_ende hochgezählt.
Am Ende soll >datum_anfang <= datum_check <> datum_ende< das Ergebnis liefern ob Eingabe okay.
Der Fehler:
Zwischen den beiden markierten / kommentierten alerts geht das gerade noch richtig errechnete Datum verloren ODER wird duch datum_ende überschreiben.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
function check_datum_vld_ztrm(check_form_feld,anz_vlf_tage,anz_vlf_monate) { var datum_param = document.getElementById(check_form_feld).value; var jahr_param = parseInt(datum_param.substr(6,4)); var monat_param = parseInt(datum_param.substr(3,2))-1; var tag_param = parseInt(datum_param.substr(0,2)); var jahr_anfang,monat_anfang,tag_anfang,jahr_ende,monat_ende,tag_ende; var sep = "."; var datum_heute = new Date(); var datum_check = new Date(jahr_param,monat_param,tag_param); var datum_anfang = new Date(); var datum_ende = new Date(); // Heutiges Datum als Ausgangspunkt für alle Datumsberechnungen setzen datum_anfang = datum_heute; datum_ende = datum_heute; anz_vlf_tage = 2; // anfangangsdatum = HEUTE plus 2 Tage für Vorlauf tag_anfang = parseInt(datum_anfang.getDate()) + anz_vlf_tage; datum_anfang.setFullYear(jahr_anfang); datum_anfang.setMonth(monat_anfang); datum_anfang.setDate(tag_anfang); jahr_anfang = datum_anfang.getFullYear(); monat_anfang = parseInt(datum_anfang.getMonth())+1; tag_anfang = datum_anfang.getDate(); alert("Anfangangsdatum neu:\n" + datum_anfang + "\n" + tag_anfang + sep + monat_anfang + sep + jahr_anfang + "\n vorgesetzt um " + anz_vlf_tage + " Tage"); alert(datum_anfang); // HIER NOCH ALLES OK = datum_anfang is RICHTIG anz_vlf_monate = 35; // End-Datum = HEUTE plus anz_vlf_monat Monate Vorlauf für Gültigkeit datum_ende.setMonth(anz_vlf_monate); jahr_ende = datum_ende.getFullYear(); monat_ende = parseInt(datum_ende.getMonth())+1; tag_ende = datum_ende.getDate(); alert("Ende-Datum neu:\n" + datum_ende + "\n" + tag_ende + sep + monat_ende + sep + jahr_ende + "\nvorgesetzt um " + anz_vlf_monat + " Monate"); alert(datum_anfang); // AB HIER HAT datum_anfang SEINEN INHALT VEROREN ODER DEN WERT VON datum_ende ÜBERNOMMEN? // Vergleichen if (datum_anfang <= datum_check && datum_check <= datum_ende) { // OK ......... } else { // Fehler: Eingegebenes Datum check liegt außhalb des gültigen Zeitraums alert("Falsche Angabe!\nIhre Angabe\n>" + datum_param + "< / " + datum_check + "\n liegt außerhalb des gültigen Zeitraums vom\n>" + tag_anfang + sep + monat_anfang + sep + jahr_anfang + "< / " + datum_anfang + " bis\n>" + tag_ende + sep + monat_ende + sep + jahr_ende + "< / " + datum_ende + "<.\n\n Bitte gültiges Datum eingeben!"); } }
Habe Euch alerts zur Kontrolle eingebaut...
Zwischen dem noch richtrigen und dann dem falschen Wert, wird das Datumsfeld nicht angesprochen... 
Vielen Dank für Eure Hilfe!
Ralf
-
Hi,
beim Drübersehen würde ich vermuten, dass der Fehler in diesen Zeilen zu finden ist:
Hier wird beiden Variablen (datum_anfang und datum_ende) die Referenz auf das gleiche Date-Objekt zugewiesen. Werden später Änderungen an diesen Variablen vorgenommen, so ist das Ziel immer das gleiche Datumobjekt.Code :1 2 3
// Heutiges Datum als Ausgangspunkt für alle Datumsberechnungen setzen datum_anfang = datum_heute; datum_ende = datum_heute;
Du weisst ja vorher schon beiden Variablen ein eigenes Date-Objekt zu - das sollte reichen. Die oben besprochenen Zeilen können entfallen.
Code :1 2
var datum_anfang = new Date(); var datum_ende = new Date();
Desweiteren müssen einige Zeilen umorganisiert werden, da sonst mit noch nich definierten Werten gearbeitet wird.
Code :1 2 3 4 5 6 7
tag_anfang = parseInt(datum_anfang.getDate()) + anz_vlf_tage; jahr_anfang = datum_anfang.getFullYear(); monat_anfang = parseInt(datum_anfang.getMonth())+1; datum_anfang.setFullYear(jahr_anfang); datum_anfang.setMonth(monat_anfang); datum_anfang.setDate(tag_anfang); tag_anfang = datum_anfang.getDate();
Ciao
QuaeseVielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
----
Der "Fortsetzungsroman" auf www.leuteforum.de
New kind to realize large scalable projects with jQuery: jQuery SDK
-
14.11.09 19:59 #3
- Registriert seit
- Nov 2009
- Beiträge
- 7
Hi Quaese,
die Datumsvariablen habe ich in einer var-Liste....... hintereinander weg deklariert, nur nicht definiert, das müsste schon passen, weil sie ja angelegt sind.
Für den Tipp der Ursprungsdefinition vielen Dank! Aber warum macht das JavaScript so Kann es mehrere Variablen vom Typ "Datum" nicht mehr auseinander halten?
Ich probier morgen noch n bissl rum...
Danke!
Gruß Ralf
Ähnliche Themen
-
Vektor wird überschrieben
Von hury im Forum Java GrundlagenAntworten: 1Letzter Beitrag: 16.01.10, 17:41 -
Variable wird überschrieben
Von araser im Forum PHPAntworten: 4Letzter Beitrag: 25.11.06, 12:00 -
Fileinhalt wird überschrieben
Von witness im Forum JavaAntworten: 4Letzter Beitrag: 25.02.05, 22:43 -
SESSION wird überschrieben
Von snackx im Forum PHPAntworten: 2Letzter Beitrag: 12.08.04, 16:58 -
Seite wird überschrieben
Von Howie im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 16.05.04, 15:29





Zitieren

Login





