JamesD26: Fehler im script

Hi Leute!

Ich hab folgendes Script geschrieben.

Die Ausgabe sollte lauten " Nächster Austecktermin: 19.08.2004".
Doch das einzige was ich zurückbekomme is "Ausgesteckt bis: 11.06.2005Nächster Ausstecktermin: 08.07.2005".

Ich such schon die ganze Zeit nach Fehlern, aber bin leider noch Anfänger.

Vielleicht könnt Ihr mir mal kurz helfen und mich auf den Fehler aufmerksam machen.

thanxs james

<?php
function formatDate ($ts)
{
 $date = date("d.m.Y", $ts);
 return $date;
};

function formatDateTs ($mon, $tag, $jahr)
{
 $stamp= mktime(0,0,0,$mon, $tag, $jahr);
 return $stamp;
};

$von[0]= formatDateTs(13,11,2003);
$von[1]= formatDateTs(8,1,2004);
$von[2]= formatDateTs(12,2,2004);
$von[3]= formatDateTs(18,3,2004);
$von[4]= formatDateTs(6,5,2004);
$von[5]= formatDateTs(17,6,2004);
$von[6]= formatDateTs(19,8,2004);
$von[7]= formatDateTs(18,9,2004);
$von[8]= formatDateTs(14,10,2004);
$von[9]= formatDateTs(11,11,2004);
//*********************************
$bis[0]= formatDateTs(30,11,2003);
$bis[1]= formatDateTs(25,1,2004);
$bis[2]= formatDateTs(29,2,2004);
$bis[3]= formatDateTs(4,4,2004);
$bis[4]= formatDateTs(23,5,2004);
$bis[5]= formatDateTs(4,7,2004);
$bis[6]= formatDateTs(5,9,2004);
$bis[7]= formatDateTs(26,9,2004);
$bis[8]= formatDateTs(31,10,2004);
$bis[9]= formatDateTs(28,11,2004);

$time=time();
$anzahl = count($von);
$i = 0;

while($i < $anzahl){
 if($time >= $von[$i] && $time <= $bis[$i]){
     echo("Ausgesteckt bis: " . formatDate($bis[$i]));
     break;
 };
 $i++;
};
while($i < $anzahl){
     if($time > $bis[$i] && $time < $von[$i+1]){
     echo("Nächster Ausstecktermin: " . formatDate($von[$i+1]));
     break;
 };
 $i++;
};

?>

  1. Moin James,

    Die Ausgabe sollte lauten " Nächster Austecktermin: 19.08.2004".
    Doch das einzige was ich zurückbekomme is "Ausgesteckt bis: 11.06.2005Nächster Ausstecktermin: 08.07.2005".

    Kein Wunder, das geben ja auch die Schleifen unten aus.

    Ich such schon die ganze Zeit nach Fehlern, aber bin leider noch Anfänger.

    !? Script vielleicht ändern? ...

    $stamp= mktime(0,0,0,$mon, $tag, $jahr);

    Richtige Argumentsanordnung?

    $von[0]= formatDateTs(13,11,2003);
    $von[1]= formatDateTs(8,1,2004);
    $von[2]= formatDateTs(12,2,2004);
    $von[3]= formatDateTs(18,3,2004);
    ...

    weitaus einfacher wäre z.B. folgendes:

    $von = array(
        "13.11.2003",
        "08.01.2004",
        ....);

    usw., und das dann mit strtotime() in einen Timestamp verwandeln.

    $time=time();

    ...

    $anzahl = count($von);
    $i = 0;
    while($i < $anzahl){
     if($time >= $von[$i] && $time <= $bis[$i]){
         echo("Ausgesteckt bis: " . formatDate($bis[$i]));
         break;
     };

    ^ <- syntax fehler. ";" gehört da nicht hin.

    $i++;
    };

    ^ <- syntax fehler. s.o.. Welche PHP-Version benutzt du!??

    Generell einfacher wäre hier übrigens eine for-schleife:

    for($i=0;$i < count($von);$i++)
    {
        if($time >= $von[$i] && $time <= $bis[$i])
        {
            echo 'Ausgesteckt bis: '.formatDate($bis[$i]);
            break;
        }
    }

    evv. ließe es sich auch mit einer Foreach-Schleife noch einfacher machen.

    while($i < $anzahl){
         if($time > $bis[$i] && $time < $von[$i+1]){
         echo("Nächster Ausstecktermin: " . formatDate($von[$i+1]));
         break;
     };
     $i++;
    };

    Syntaxfehler s.o.. Warum gehst du das eigentlich 2mal durch? Es würde - wenn ich das jetzt richtig sehe - auch in einem durchlauf gehen. Bräuchtest halt ein paar "break-ersetzt"-Variabelchen (wie soll man das beschreiben...) ;o)

    Gruß,

    Sven

    --
      TERMine: * 28.07.2004 - max. 30.08.2004 ** potentielle Abwesenheitsgefahr
               * 04.08.2004                   ** Namenstage für die "Sven"'s im Forum (scnr)
      MAIL@me: Die Abwesenheitsmail:  mailto:sommerferien04.20.wauwau@spamgourmet.org
     SELFcode: ie:% fl:| br:^ va:{ ls:& fo:) rl:( n4:( ss:) de:> js:| ch:° mo:} zu:}