Zeit-ende berechnen

tschitscho

Mitglied
Ich möchte ein Script schreiben das mir das Zeit-Ende ausgibt und zwar folgendermassen.
Wenn ich von einem bestimmten Datum rechne, z.B 25.05.2005 13:53,
dann geb ich 11h dazu.
Was jetzt aber geschehen soll: es soll die Zeit rechnen bis 17:00, das wären 3h7min und der rest dann morgen ab 08:00 dazu also die restlichen 7h53 dazurechnen.
Das Resultat wäre dann am 26.06.2005 um 15:53. Wochenenden sollten natürlich auch berücksichtigt werden

Könnt ihr mir bitte weiterhelfen? wie mach ich das?

Danke
 
Also ich verstehe dein Problem nicht wirklich, vielleicht solltest du dir mal genau aufschreiben was du willst, warum und alle Sonderfälle, dann bringst du das ganze in ein Programmablaufplan oder Struktogram. Und schon wirst du für dein Problem eine Lösung finden.

Ansätze die ich dir geben kann ... arbeite im Sekundenbereich (Unix Timestamp), damit kannst du einfach umrechnungen dann in Stunden Minuten vollziehen und sogar die Enddaten ermitteln.

Gehen wir davon aus es ist 16:30 bis 17 Uhr wird gearbeitet und ab 8 uhr des folgenden Tages weitergemacht.

Du gibst ein 3:30h. Dann weisst du du arbeitest noch 30 Minuten

$timestamp17uhr -$timestampjetzt = 30*60 = 1800 Sekunden

verbleibendezeit = 210*60 etc.

Nun rechnest du weiter mit dem Timestamp vom nächsten Arbeitstag wieder an.

So kannst du auch rausfinden ob es Sonntag ist. und dementsprechend reagieren. Aber dazu wird dir ein PAP oder Struktogramm sehr helfen.

Funktionen die dir helfen:

de.php.net/time
de.php.net/date
 
ok, ein wenig strukturiert:

a = now ....25.05.05 15:15
b = differenz von heute 17.00 - a ...1h45min
c = differenz von 11h - 1h45min ... 9h15min
d = morgen 08:00 + c
(wenn d über 17:00, dann wird der nächsten Arbeitstag gerechnet)
Hier gilt: ein Tag dauert von 8-17, das sind 9h

Das Resultat wäre demnach. 30.05.2005 08:15
 
Hi !
Ich hab da mir grade langweilig war hab ich mich mal an dein
Problem gesetzt:
PHP:
<?
$zeit=10000;
$check = true;
$now=time();
do{
$day=strftime("%d",$now);
$mon=strftime("%m",$now);
$year=strftime("%Y",$now);
$wday=strftime("%w",$now);
$hour=strftime("%H",$now);
if ($wday == 6) { #überprüft ob samstag ist
$now = $now + 172800;
$day=strftime("%d",$now);
$mon=strftime("%m",$now);
$year=strftime("%Y",$now);
$now = mktime (8,0,0,$mon,$day,$year);
}
else{
if ($wday == 0) { #überprüft ob sonntag ist
$now = $now + 86400;
$day=strftime("%d",$now);
$mon=strftime("%m",$now);
$year=strftime("%Y",$now);
$now = mktime (8,0,0,$mon,$day,$year);
}
else{
$ende = mktime (17,0,0,$mon,$day,$year);
if($now > $ende) {
$now = $now + 86400;
$day=strftime("%d",$now);
$mon=strftime("%m",$now);
$year=strftime("%Y",$now);
$now = mktime (8,0,0,$mon,$day,$year);
}
else{
$now = $now + $zeit;
if ($now > $ende){
$zeit = $now - $ende;
$now = $now + 86400;
$day=strftime("%d",$now);
$mon=strftime("%m",$now);
$year=strftime("%Y",$now);
$now = mktime (8,0,0,$mon,$day,$year);
}
else{
$check=false;
}
}
}
}
}while ($check == true) ;
echo "ende der arbeitszeit ist: ".date("d.m.y G:i",$now);
 
 
?>

Den Tip hast du doch bekommen ...

Wenn du selber ein Problem lösen willst dann solltst
du dich auch mit dem was dir die Leute raten beschäftigen.;)

Danke für die Beschäftigung, wenn es noch fragen gibt
bin ich natürlich gerne bereit weiter zu helfen.

Gruß Benny
 
Mir fällt gerade auf das bei größerem Zeitraum ein Fehler
bei der berechnung auftritt...

Ich weis aber noch nicht woran es liegt!
 
Ok ich hab den fehler gefunden.
Die ersten 3 Zeilen der 2ten
if $now > $ende Abfrage müssen so aussehn:
PHP:
if ($now > $ende){
$zeit = $now - $ende;
$now = $ende + 86400;

Gruß Benny
 
Hier noch ein Tip:

strftime benutzt die (Zeit-)Zonen-Einstellungen des Servers.
Diese können durch Anwendungen, wie z.b. php verändert werden.

Wer also kein alleinigen Zugriff auf den Server hat, z.b. (Shared) Webhosting mit vielen Domains, sollte immer vor dem Aufruf auf die gewünschten, localen, Einstellungen zurücksetzen.

Also vor [phpf]strftime[/phpf] immer noch [phpf]setlocale[/phpf] ausführen.
setlocale (LC_ALL, 'de_DE');
 
Vielen Dank für eure schnellen Antworten.
Das Projekt ist sozusagen auf Eis gelegt worden, wer die unvollständige Lösung anschauen möchte, kann das hier tun.
 
Zurück