Runterzähl-Script mit mehr Terminen

hertawin

Grünschnabel
Hallo allerseits,

wie binde ich das in dem unten stehendem Script ein?

dass an dem Tag, wo es heißen würde "In 0 Tagen ist Weihnachten!" aber angezeigt wird: "Heute ist Weihnachten"
dass an dem Tag, wo es heißen würde "In 1 Tagen ist Weihnachten!" angezeigt wird: "In einem Tag ist Weihnachten!"
dass es am 25.12. nicht heißt "In -1 Tagen ist Weihnachten!" sondern "In 364/363 Tagen ist Weihnachten!" - je nach Schaltjahr

Danke schon mal...

Viele Grüße
hertawin


PHP:
<td width="273"><span class="fontleftdays">
              <?

// stichtag weihnachten 24.12.2010 als Unixtime erzeugen + 1 Tag mehr
$newDate = mktime(0,0,0, 12, 25, 2010);
// aktuelle Zeit im Unixformat erzeugen
$actDate = time();
// Differenz berechnen (in Sekunden)
$diffDate = ($newDate-$actDate);

// Anzahl Tage = Sekunden /24/60/60
// floor() liefert nur den Anteil vor dem Komma
$days = floor($diffDate / 24 / 60 / 60 );
// den verbleibenden Rest berechnen = Stunden
$diffDate = $diffDate - ($days*24*60*60);
// den Stundenanteil herausrechnen
$hours = floor($diffDate / 60 / 60);
$diffDate = ($diffDate - ($hours*60*60));
// den Minutenanteil
$minutes = floor($diffDate/60);
$diffDate = $diffDate - ($minutes*60);
// die verbleibenden Sekunden
$seconds = floor($diffDate);

// und das ganze dann Anzeigen:
echo "In $days Tagen ist Weihnachten!<br>";
//, $hours Stunden, $minutes Minuten und $seconds Sekunden
?>
            </span></td>
 
In dem du die Tage prüfst und dementsprechend ersetzt:

PHP:
switch($days)
{
  case '0':
    $time = 'Heute';
  break;
  case '1':
    $time = 'In einem Tag';
  break;
  default:
    $time = "In {$days} Tagen";
}

echo "{$time} ist Weihnachten!<br>";
 
Hallo Felix,
danke schon mal, hat schon viel weitergeholfen. Ein bisschen modifiziert habe ich deinen Vorschlag auch, z.B. habe ich auch die Stunden mithinzugenommen. Es klappt aber in dem Moment nicht, wenn nur noch ein Tag übrig ist. Dann bringt er trotzdem "Nur noch 1 Tage bis Weihnachten." Bei "case 0" passt es und bei default auch. Die Unixzeit habe ich jetzt auf 02,18,2010 gestellt, damit die entsprechende falsche Meldung auch kommt. Warum klappt es nicht?

Dasselbe Problem habe ich jetzt auch mit den Stunden (bei 1 Stunde heißt es "in 1 Stunden" und bei 0 Stunden heißt es "in 0 Stunden" (in dem Fall kann man die Angabe ganz weglassen), vielleicht kann man das noch mit berücksichtigen. Ich wüsste nicht, wie man das noch mit reinpackt.

LG, hertawin

PHP:
<?
/ stichtag als Unixtime erzeugen + 1 Tag mehr
$newDate = mktime(0,0,0, 02, 18, 2010);
// aktuelle Zeit im Unixformat erzeugen
$actDate = time();
// Differenz berechnen (in Sekunden)
$diffDate = ($newDate-$actDate);

// Anzahl Tage = Sekunden /24/60/60
// floor() liefert nur den Anteil vor dem Komma
$days = floor($diffDate / 24 / 60 / 60 );
// den verbleibenden Rest berechnen = Stunden
$diffDate = $diffDate - ($days*24*60*60);
// den Stundenanteil herausrechnen
$hours = floor($diffDate / 60 / 60);
$diffDate = ($diffDate - ($hours*60*60));
// den Minutenanteil
$minutes = floor($diffDate/60);
$diffDate = $diffDate - ($minutes*60);
// die verbleibenden Sekunden
$seconds = floor($diffDate);


switch($days)
{
  case '0':
    $time = "Heute ist es soweit!";
  break;
  case '1':
    $time = "Nur noch ein Tag und {$hours} Stunden bis Weihnachten";
  default:
    $time = "Nur noch {$days} Tage und {$hours} Stunden bis Weihnachten";
}

echo "{$time}<br>";  
?>
 
Ich habe im Beispiel ein break hinter dem ersten Fall vergessen, dadurch wurde $time überschrieben. Ist jetzt gefixt.
 

Neue Beiträge

Zurück