PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Werktage über mehrere Monate berechnen! (https://www.php-resource.de/forum/php-developer-forum/79153-werktage-ueber-mehrere-monate-berechnen.html)

m-werk 12-12-2006 15:53

Werktage über mehrere Monate berechnen!
 
Hallo, mit folgendem Code kann ich für jedes einzellne Monat die tatsächliche Arbeitszeit berechnen.

Ich möchte aber über das Monat hinaus das berechnen, sprich, ich möchte wissen, wieviele Werktage es vom z.B. 1.1.2006 bis 31.12.2006 sind.

Leider weiss ich nicht, wass ich da an diesem Code ändern muss, so dass auch das Enddatum hineinkommt.

PHP-Code:

$Jahr=2006;
$Monat=1;
$Tag=1;
$MonatEnde=12;
$TagEnde=31;
$JahrEnde=2006;

function 
ArbeitstageErmitteln($Jahr$Monat$JahrEnde$MonatEnde$TagEnde)

  for(
$i=1$i<=date("t"mktime(000$Monat$Tag$Jahr)); $i++)
    {
    if(
date("w"mktime(000$Monat$i$Jahr))!=&& date("w"mktime(000$Monat$i$Jahr))!=6)
      {
      
$Anzahl++;
      }
    }
  return 
$Anzahl;
}

echo 
ArbeitstageErmitteln($Jahr$Monat$JahrEnde$MonatEnde$TagEnde); 

Kann mir da jemand unterstützen?

XGremliN 12-12-2006 16:13

du musst deine Funktion in eine Schleife einbinden, die vom Start- bis zum End-Datum läuft

jmc 12-12-2006 16:14

dieses Script funktioniert aber doch wohl nicht, oder?

$Tag liegt nicht im scope der Funktion und ist ihr deshalb unbekannt.

m-werk 12-12-2006 16:31

Zitat:

dieses Script funktioniert aber doch wohl nicht, oder?

$Tag liegt nicht im scope der Funktion und ist ihr deshalb unbekannt.
Sicherlich liegt $Tag drinn.


for($i=1; $i<=date("t", mktime(0, 0, 0, $Monat, $Tag, $Jahr)); $i++)

Zitat:

du musst deine Funktion in eine Schleife einbinden, die vom Start- bis zum End-Datum läuft
Und da steh ich jetzt an.

Bitte um hilfe!!

Maschenka 12-12-2006 16:52

Zitat:

Original geschrieben von m-werk
Sicherlich liegt $Tag drinn.


for($i=1; $i<=date("t", mktime(0, 0, 0, $Monat, $Tag, $Jahr)); $i++)

$Tag wird zwar innerhalb der Funktion verwendet, ihr aber nicht uebergeben, soll heissen, $Tag fehlt in dieser Zeile:
function ArbeitstageErmitteln($Jahr, $Monat, $JahrEnde, $MonatEnde, $TagEnde)

m-werk 12-12-2006 16:59

OK, sorry, hab ich übersehen.

Leider weiss ich noch immer nicht, wie ich eine schleife vom Startdatum bis zum Enddatum über diese Funktion legen kann.

wahsaga 12-12-2006 17:17

Zitat:

Original geschrieben von m-werk
Leider weiss ich noch immer nicht, wie ich eine schleife vom Startdatum bis zum Enddatum über diese Funktion legen kann.
Dann überleg' (weiter).

Immer nur mit "ich weiss nicht" und "ich kann nicht" zu kommen, ist doch wohl etwas wenig.

Also zeige bitte zumindest einen Ansatz. Wenn dieser noch Fehler enthält, kann man ihn ja ggf. gemeinsam verbessern.
Aber gar kein eigener Vorschlag ist mir zumindest zu wenig.

m-werk 13-12-2006 08:34

Ich könnte mir dabe nur eines vorstellen.

Zuerst muss ich mal die Startzeit und Endzeit in ein Timestamp umwandeln.

So. Du hast geschrieben, dass ich diese Funktion in eine Schleife packen muss.


Hier mal mein Ansatz:

Vor der Funktion:

PHP-Code:

$d1 date('t'mktime(000$Monat+10$Jahr));

for(
$i1=1;$i1<=$d1;$i1++){
$itest=str_pad($i12'0'STR_PAD_LEFT);

$Monatsdurchlauf=$Jahr.$itest.$Tag;

function......
.....


Ich kann mir aber nicht vorstellen, das das funktionieren kann.

------------------
Tut es auch nicht.

XGremliN 13-12-2006 08:41

1. Startdatum als Timestamp
-- Schleifenstart --
2. Aufdröseln des ganzen in jahr, monat und tag
3. Aufruf deiner funktion
4. zu dem Timestamp 1 Tag dazu addieren
5. Wenn Timestamp jetzt >= Endedatum beende die Schleife, ansonsten weiter bei 2.

m-werk 13-12-2006 09:24

so hab ich jetzt mal angefangen:

PHP-Code:

$startdatum=mktime(0,0,0,$Monat,$Tag,$Jahr);
$enddatum=mktime(0,0,0,$MonatEnde,$TagEnde,$JahrEnde);

for(
$i1=$startdatum;$i1<=$enddatum;$i1++){
$test1=date("d.m.Y"$i1);
echo 
"$test1<br>";


Diese schleife kann ich aber so nicht verwenden, da der timestamp hier immer um 1 erhöht wird. das wird alleine für den 1.1.2006 unendlich.

Maschenka 13-12-2006 09:28

Zitat:

Original geschrieben von m-werk
Diese schleife kann ich aber so nicht verwenden, da der timestamp hier immer um 1 erhöht wird. das wird alleine für den 1.1.2006 unendlich.
Nicht unendlich, sondern so viele Male, wie der Tag Sekunden hat. Du könntest den Timestamp um so viel erhöhen, wie ein Tag Sekunden hat, um auf den jeweils nächsten Tag zu kommen. Allerdings gibts da dann wieder kleine Problem bezüglich Sommer-/Winterzeit, aber zum Üben hilft es vielleicht erstmal weiter.

XGremliN 13-12-2006 09:28

du kannst auch nicht einfach so zu einem Timestamp eine 1 addieren.
Ausserdem solltest du eine while-Schleife benutzen, da du ja gar nicht weisst, wie oft deine Schleife durchlaufen wird.

Such mal nach "datumsberechnung" oder "rechnen mit Datum".

m-werk 13-12-2006 10:11

ich schnalls einfach nicht. ich komm nicht dahinter. Es hilft nichts.

Ich habe ein while (true) vor der schleife gesetzt. Das mit den timestring hab ich noch nicht in meinem kopf. Ich versuch das ding schon seit 2 Tagen zum laufen zum bringen, aber hänge totall.

wahsaga 13-12-2006 10:17

Zerlege ein Problem immer in Teilaufgaben, wenn du nicht weiter kommst - so lange, bis diese klein genug sind, dass du sie einzeln zu lösen vermagst.

Wo hängst du denn jetzt konkret?

XGremliN 13-12-2006 10:17

Zitat:

Ich habe ein while (true) vor der schleife gesetzt
und damit eine Endlosschleife produziert, wenn ich dich richtig verstehe.
Du sollst die for-Schleife durch eine while-Schleife ERSETZEN!


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:16 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG