Datum geht verloren / wird überschrieben

Ralf_fragt

Grünschnabel
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:
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... :confused:

Vielen Dank für Eure Hilfe!
Ralf
 
Hi,

beim Drübersehen würde ich vermuten, dass der Fehler in diesen Zeilen zu finden ist:
Code:
  // Heutiges Datum als Ausgangspunkt für alle Datumsberechnungen setzen
  datum_anfang = datum_heute;
  datum_ende = datum_heute;
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.

Du weisst ja vorher schon beiden Variablen ein eigenes Date-Objekt zu - das sollte reichen. Die oben besprochenen Zeilen können entfallen.
Code:
  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:
  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
Quaese
 
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
 

Neue Beiträge

Zurück