Peter Kaltenbach: Datumeingabe auf Gültigkeit prüfen

Hallo,

ich möchte auch mal nicht nur Fragen stellen. Deswegen der folgende Script der hoffentlich für einige nützlich ist.
function TestDatum( nTag, nMaxTag ) {
if( nTag >= 1 && nTag <= nMaxTag )
  return true
else
  return false
}

function IstSchaltjahr( nJahr ) {
if (( nJahr % 100 != 0 ) &&
  ( nJahr % 4 == 0 )
  ( nJahr % 400 == 0 )) {
   return true;
  }
return false;
}

function DatumGueltigEx( nTag, nMonat, nJahr ) {
var ok;
ok=false;

switch( nMonat ) {  

case 1:
   ok= TestDatum( nTag, 31 );
   break;
  case 2:
   if( IstSchaltjahr( nJahr ) ) {
    ok= TestDatum( nTag, 29 )
   } else {
    ok= TestDatum( nTag, 28 )
   }
   break;
  
  case 3:
   ok= TestDatum( nTag, 31 );
   break;
  case 4:
   ok= TestDatum( nTag, 30 );
   break;
  case 5:
   ok= TestDatum( nTag, 31 );
   break;
  case 6:
   ok= TestDatum( nTag, 30 );
   break;
  case 7:
   ok= TestDatum( nTag, 31 );
   break;
  case 8:
   ok= TestDatum( nTag, 31 );
   break;
  case 9:
   ok= TestDatum( nTag, 30 );
   break;
  case 10:
   ok= TestDatum( nTag, 31 );
   break;
  case 11:
   ok= TestDatum( nTag, 30 );
   break;
  case 12:
   ok= TestDatum( nTag, 31 );
   break;
}

return ok;  

}

function DatumGueltig( strDatum )
{
var nTag, nMonat, nJahr;
var punkt1,punkt2;
var gueltig;
if (strDatum=="") return true;
gueltig=false
// auseinandernehmen
punkt1=strDatum.indexOf(".");
punkt2=punkt1+1+strDatum.indexOf(".",punkt1);
punkt2=strDatum.lastIndexOf(".")
nTag=strDatum.slice(0,punkt1);
nMonat=strDatum.slice(punkt1+1,punkt2)
nJahr=strDatum.slice(punkt2+1);
if (nJahr.length != 4 ) {
  alert("Ungültiges Datum ( "+strDatum+" ) !! Bitte geben Sie ein gültiges Datum ein (tt.mm.jjjj) ! " );
  return false;
}

gueltig=DatumGueltigEx( Number(nTag), Number(nMonat), Number(nJahr) );  
if (gueltig==false) alert("Ungültiges Datum ( "+strDatum+" ) !! Bitte geben Sie ein gültiges Datum ein (tt.mm.jjjj) ! " );  

return gueltig;  

}

Wenn nun noch jemand eine Lösung für mein Problem vom 12.7. bezüglich IIS hat, wäre ich überglücklich.

Gruß aus Potsdam
Peter

  1. Hallo Peter,

    ich möchte auch mal nicht nur Fragen stellen. Deswegen der folgende Script der hoffentlich für einige nützlich ist.

    Ich haette noch einige Tips zu Deinem Script:

    function IstSchaltjahr( nJahr ) {

    »»  if (( nJahr % 100 != 0 ) &&

    ( nJahr % 4 == 0 )
      ( nJahr % 400 == 0 )) {
       return true;
      }

    »»  return false;

    }

    Hier koenntest Du die Uebersichtlichkeit etwas verbessern, indem Du schreibst:
      if ((( nJahr % 100 != 0 ) &&
                      ( nJahr % 4 == 0 ))
                     ( nJahr % 400 == 0 )) {
    Die zusaetzlichen Klammern erleichtern einfach das Lesen.

    function DatumGueltigEx( nTag, nMonat, nJahr ) {

    »»  var ok;
    »»  ok=false;
    »»  
    »»  switch( nMonat ) {

    case 1:

    Stattdessen wuerde ich schreiben:
          case 1, 3, 5, 7, 8, 10, 12:

    ok= TestDatum( nTag, 31 );
       break;
      case 2:
       if( IstSchaltjahr( nJahr ) ) {
        ok= TestDatum( nTag, 29 )
       } else {
        ok= TestDatum( nTag, 28 )
       }
       break;
      
      case 4:

    Und hier dann:
           case 4, 6, 9, 11:

    ok= TestDatum( nTag, 30 );
       break;

    »»  }
    »»  
    »»  return ok;

    }

    Dadurch verkuerzt sich das ganze Script doch etwas. Dann noch eine kleine, aber boese Falle: Wenn Du mit historischen Daten arbeiten willst gibt es im Jahr 1592 im gregorianischen Kalender eine kleine Luecke von elf Tagen, die garnicht existieren. Diese Tage fielen als Korrekturtage zur Kalendersynchronisation aus. damals hatte man naemlich die Situation, das der Lauf der Erde um die Sonne (unser Kalenderbezugspunkt) und der Jahreszeitenlauf nicht mehr synchron waren mit dem bis dahin geltenden julianischen Kalender. In einigen Laendern (z.B.: Russland) ist diese Umstellung in diesem Jahrhundert erst vollzogen worden, weswegen die russische "Oktoberrevolution" nach unserem Kalender schon im November stattfand, eine Sache, die im Geschichtsunterricht auch schonmal zu Verwirrungen gefuehrt hat.

    Schoene Gruesse aus Koeln

    Michael N.

    1. Hallo, Michael

      Stattdessen wuerde ich schreiben:
            case 1, 3, 5, 7, 8, 10, 12:

      ok= TestDatum( nTag, 31 );
         break;

      Bei mir hat im Test case und dann eine Aufzählung mehhrer Werte durch Komma getrennt (wie oben aufgeführt)  nicht gefunzt.

      Gruß
      Peter

      1. Hallo Peter,

        Stattdessen wuerde ich schreiben:
              case 1, 3, 5, 7, 8, 10, 12:

        ok= TestDatum( nTag, 31 );
           break;

        Bei mir hat im Test case und dann eine Aufzählung mehhrer Werte durch Komma getrennt (wie oben aufgeführt)  nicht gefunzt.

        Hast recht, da hab ich die VBA-Syntax mit der JS-Syntax verwechselt, aber folgendes funzt, dadurch spart man den x-fachen gleichen Code:
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
           ok= TestDatum( nTag, 31 );
           break;

        Sowas passiert, wenn man staendig zwischen mehreren Programmiersprachen wechselt.

        Bis danndann

        Michael N.

    2. Hallo Michael,

      bisher habe ich immer nur mitgelesen, aber jetzt will ich mich doch mal kurz melden.

      Dadurch verkuerzt sich das ganze Script doch etwas. Dann noch eine kleine, aber boese Falle: Wenn Du mit historischen Daten arbeiten willst gibt es im Jahr 1592 im gregorianischen Kalender eine kleine Luecke von elf Tagen, die garnicht existieren. Diese Tage fielen als Korrekturtage zur Kalendersynchronisation aus. damals hatte man naemlich die Situation, das der Lauf der Erde um die Sonne (unser Kalenderbezugspunkt) und der Jahreszeitenlauf nicht mehr synchron waren mit dem bis dahin geltenden julianischen Kalender. In einigen Laendern (z.B.: Russland) ist diese Umstellung in diesem Jahrhundert erst vollzogen worden, weswegen die russische "Oktoberrevolution" nach unserem Kalender schon im November stattfand, eine Sache, die im Geschichtsunterricht auch schonmal zu Verwirrungen gefuehrt hat.

      Das ist im Prinzip richtig. Genau war die Kalenderreform allerdings 1582. Damals folgte auf Donnerstag, den 4. Oktober gleich Freitag, der 15. Oktober. Aber das ist ja schon so lange her... ;-)

      Viele Gruesse aus Nordfriesland
      Klaus