tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
350
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Ralf_fragt Ralf_fragt ist offline Rookie
    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
     

  2. #2
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    Hi,

    beim Drübersehen würde ich vermuten, dass der Fehler in diesen Zeilen zu finden ist:
    Code :
    1
    2
    3
    
      // 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 :
    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
    Quaese
     
    Vielleicht 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

  3. #3
    Ralf_fragt Ralf_fragt ist offline Rookie
    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

  1. Vektor wird überschrieben
    Von hury im Forum Java Grundlagen
    Antworten: 1
    Letzter Beitrag: 16.01.10, 17:41
  2. Variable wird überschrieben
    Von araser im Forum PHP
    Antworten: 4
    Letzter Beitrag: 25.11.06, 12:00
  3. Fileinhalt wird überschrieben
    Von witness im Forum Java
    Antworten: 4
    Letzter Beitrag: 25.02.05, 22:43
  4. SESSION wird überschrieben
    Von snackx im Forum PHP
    Antworten: 2
    Letzter Beitrag: 12.08.04, 16:58
  5. Seite wird überschrieben
    Von Howie im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 16.05.04, 15:29

Stichworte