PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |
|

12-12-2006, 15:53
|
m-werk
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Beiträge: 168
|
|
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(0, 0, 0, $Monat, $Tag, $Jahr)); $i++)
{
if(date("w", mktime(0, 0, 0, $Monat, $i, $Jahr))!=0 && date("w", mktime(0, 0, 0, $Monat, $i, $Jahr))!=6)
{
$Anzahl++;
}
}
return $Anzahl;
}
echo ArbeitstageErmitteln($Jahr, $Monat, $JahrEnde, $MonatEnde, $TagEnde);
Kann mir da jemand unterstützen?
|

12-12-2006, 16:13
|
XGremliN
PHP Senior
|
|
Registriert seit: Sep 2003
Ort: Karl-Marx-Stadt
Beiträge: 1.900
|
|
du musst deine Funktion in eine Schleife einbinden, die vom Start- bis zum End-Datum läuft
__________________
it's not a bug,
it's a feature!
|

12-12-2006, 16:14
|
jmc
PHP Junior
|
|
Registriert seit: Mar 2006
Beiträge: 868
|
|
dieses Script funktioniert aber doch wohl nicht, oder?
$Tag liegt nicht im scope der Funktion und ist ihr deshalb unbekannt.
|

12-12-2006, 16:31
|
m-werk
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Beiträge: 168
|
|
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!!
|

12-12-2006, 16:52
|
Maschenka
Newbie
|
|
Registriert seit: May 2004
Beiträge: 42
|
|
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)
|

12-12-2006, 16:59
|
m-werk
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Beiträge: 168
|
|
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.
|

12-12-2006, 17:17
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
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.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

13-12-2006, 08:34
|
m-werk
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Beiträge: 168
|
|
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(0, 0, 0, $Monat+1, 0, $Jahr));
for($i1=1;$i1<=$d1;$i1++){
$itest=str_pad($i1, 2, '0', STR_PAD_LEFT);
$Monatsdurchlauf=$Jahr.$itest.$Tag;
function......
.....
}
Ich kann mir aber nicht vorstellen, das das funktionieren kann.
------------------
Tut es auch nicht.
Geändert von m-werk (13-12-2006 um 08:47 Uhr)
|

13-12-2006, 08:41
|
XGremliN
PHP Senior
|
|
Registriert seit: Sep 2003
Ort: Karl-Marx-Stadt
Beiträge: 1.900
|
|
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.
__________________
it's not a bug,
it's a feature!
|

13-12-2006, 09:24
|
m-werk
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Beiträge: 168
|
|
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.
|

13-12-2006, 09:28
|
Maschenka
Newbie
|
|
Registriert seit: May 2004
Beiträge: 42
|
|
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.
|

13-12-2006, 09:28
|
XGremliN
PHP Senior
|
|
Registriert seit: Sep 2003
Ort: Karl-Marx-Stadt
Beiträge: 1.900
|
|
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".
__________________
it's not a bug,
it's a feature!
|

13-12-2006, 10:11
|
m-werk
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Beiträge: 168
|
|
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.
|

13-12-2006, 10:17
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
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?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

13-12-2006, 10:17
|
XGremliN
PHP Senior
|
|
Registriert seit: Sep 2003
Ort: Karl-Marx-Stadt
Beiträge: 1.900
|
|
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!
__________________
it's not a bug,
it's a feature!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|