PHP Datum nach fünf Werktagen ausgeben

  • Ersteller Ersteller orschiro
  • Erstellt am Erstellt am
O

orschiro

Gast
Hallo Leute,

ich suche eine Möglichkeit mit PHP folgendes zu realisieren:

Ich habe ein Startdatum. Nun soll ein Enddatum ausgegeben werden, ab welchem 5 Werktage vergangen sind.

Beispiel: Startdatum Dienstag der 15.09.2009

Enddatum müsste der Montag der 21.09.2009 sein, da Samstag und Sonntag nicht berücksichtigt werden dürfen und so erst mit Ablauf des 21.09 fünf Werktage vergangen sind.

Ich hoffe, ihr versteht auf was ich hinaus möchte.

Danke und Grüße :)
 
Woher kommt denn immer das Datum - aus einer Datenbank? Ansonsten kannst Du ja mit der date Funktion feststellen welchen Tag aktuell ist, ist es eben Montag müssen Sa + So dazwischen gewesen sein (wenn das Datum davor lag) und Du musst die Tage des Startdatums immer -2 nehmen.

Vielleicht ist es auch einfacher mit Sekunden und Zeitstempeln zu rechnen. Wie gesagt, es wäre schön erstmal zu wissen woher das Startdatum kommt.

Edit: Was ist denn mit Feiertagen?
 
Zuletzt bearbeitet:
Hallo syntec,

das Datum soll später aus einer Datenbank kommen, ja. Der Benutzer legt es auf jeden Fall selbst fest.

Bezüglich der Feiertage, die wollte ich im 2. Schritt auch herausnehmen, jedoch war ich mir nicht bewusst, wie ich das anstellen soll, wenn ich bereits bei den Wochenenden scheitere.
 
Zuletzt bearbeitet:
Nabend,

ich glaube du meinst bei dir soll es dann am 22. zu Ende sein oder?

PHP:
<?php
$datumnew = time();
for($i=0;$i<6;$i++) {
$date = date('l',strtotime("+$i day"));
echo $date;
if($date == "Saturday") {
$datumnew = strtotime("+2 day",$datumnew);
continue;
}
$datumnew = strtotime("+1 day",$datumnew);
}
echo date('d.m.Y',$datumnew);
?>
 
also ich würds mit mktime() versuchen und dann immer einen tag draufzählen (kannste ja mit ner schleife machen)
diese schleife soll dann enden wenn zB $anzahl==5
innerhalb dieser schleife zählt du dem mktime-wert einfach einen tag dazu (also +60*60*24)und lässt ihn dann den wochentag angeben!
dann durch if/else einfach machen dass wenn der wochentag mon,tue,wed,... ist der $anzahl-variable eins dazugezählt wird! ansonsten bleibt die variable wie sie ist und deine schleife fängt erneut an!

mit den feiertagen wirds halt dann ein problem!
könntest se natürlich alle über if abfragen ob es feiertage sind, was aber vorraussetzt dass du alle feiertage vorher in dein skript reinschreibst.
 
Hallo Leute,

danke für eure Antworten.

ich glaube du meinst bei dir soll es dann am 22. zu Ende sein oder?

Nein, Montag der 21.09 war schon richtig. Hier nochmal verdeutlicht.

1. Werktag Dienstag 15.09
2. Werktag Mittwoch 16.09
3. Werktag Donnerstag 17.09
4. Werktag Freitag 18.09
5. Werktag Montag 21.09

Die Woche würde also vom 15. bis zum 21. gehen, Montag der 21. stellt den letzten Werktag dar.

Dennoch vielen Dank für deinen Code, aber leider scheint er nicht das zu tun, was ich möchte.

Ich habe ihn, folgendermaßen erweitert:

PHP:
$start_date = gmmktime(0, 0, 0, 9, 15, 2009)."<br/>"; // start date 15 Sep 2009

$datumnew = $start_date;
for($i=0;$i<5;$i++) {
$date = date('l',strtotime("+$i day"));
echo $date;
if($date == "Saturday") {
$datumnew = strtotime("+2 day",$datumnew);
continue;
}
$datumnew = strtotime("+1 day",$datumnew);
}
echo date('d.m.Y',$datumnew);

Als Ausgabe erhalte ich allerdings folgendes:

SundayMondayTuesdayWednesdayThursday20.09.2009

Bezüglich der Feiertage - da werde ich wohl nicht darum herum kommen, diese in eine Tabelle zu schreiben. Dürfte jetzt allerdings nicht so sehr das Problem sein, da es sich nur um einzelne Tage handelt. Nur wie fange ich jetzt beispielsweise noch Schulferien ab, wenn ich diese auch berücksichtigen möchte?
 
Hallo,

mein Lösungsansatz wäre folgender:

PHP:
function check($date)
{

if(checkFeiertag($date) == true)
{
    return true;
}
else if($date == "SA"  OR $date == "SO")
{
    return true;
}
else
{
    return false;
}

}


$count = 0;
do
{

if(check($date)==false)
{
    $date++;
    $count++;
}


}while($count <= 5)

Ich denke damit hast du alles abgedeckt. Natürlich müsst du an entsprechenden Stellen auf die richtigen PHP - FUntionen zurückgreifen.
 
Zuletzt bearbeitet:
finds etwas unschön mit

PHP:
if($date == "Saturday") {

zu arbeiten. Eine einstellung im php z.B set_local und schon kann das ganze script nicht funktionieren. Ich würde da eher mit den "tages nummern" arbeiten 0=Sonntag, 1=Montag usw...
 
Das mein ich garnicht... wenn checkfeiertag() doch schon bool ist, warum dann noch auf ==true oder ==false prüfen..

Kurz:

PHP:
if($date == "SA"  OR $date == "SO")
    return true;
else
    return checkFeiertag($date);

Und drunter in der do-while kann man auch kürzen mit if(!check($date)).
 
Zuletzt bearbeitet:
Zurück
Oben