Hallo zusammen,
es geht um folgendes Problem: Ich möchte den aktuellen Abrechnungszeitraum berechnen. Dieser ist - logischerweise - von dem Tag abhängig, an dem sich der Benutzer angemeldet hat.
Der Zeitraum kann 14, 30,90 Tage (eigentlich alles, hautpsache in Tagen) sein.
Es sieht also z.B. so aus: Der Benutzer meldet sich am 15.3.05 an. Heute haben wir den 17.4.05. In welchem Abrechnungszeitraum befinden wir uns, wenn das Abrechnungsintervall 14 Tage beträgt??
Hab hier folgenden Code:
(Hab meine Kommentare dringelassen, damit das schnell nachvollziehbar ist!)
Das Problem ist, dass als Referenztag nicht der Tag der Bestellung nicht korrekt verwendet wird.
Wenn sich der Kunde am 15.3. angemeldet hat, dann wären wir
15.3. + 14 = 29.3.
29.3. + 14 = 12.4.
12.4. + 14 = 26.4
Heute ist der 17.4., wird sind also im Intervall vom 12.-26.4. Das Script oben zeigt aber den 15.4. bis 29.4 an. Es wird zwar der Starttag genommen, aber eben nicht dazugezählt.
Wie kann man das elegant lösen?? Hat da jemand schon was?
1000 Dank!
strauberry
es geht um folgendes Problem: Ich möchte den aktuellen Abrechnungszeitraum berechnen. Dieser ist - logischerweise - von dem Tag abhängig, an dem sich der Benutzer angemeldet hat.
Der Zeitraum kann 14, 30,90 Tage (eigentlich alles, hautpsache in Tagen) sein.
Es sieht also z.B. so aus: Der Benutzer meldet sich am 15.3.05 an. Heute haben wir den 17.4.05. In welchem Abrechnungszeitraum befinden wir uns, wenn das Abrechnungsintervall 14 Tage beträgt??
Hab hier folgenden Code:
(Hab meine Kommentare dringelassen, damit das schnell nachvollziehbar ist!)
PHP-Code:
// Wenn das Abrechnungsinterval monatlich ist, also immer -
// am 1. eines Monats beginnt, muss der erste des aktuellen
// Monats genommen werden
if($txt_Abrechnungsinterval == "Monatsanfang") {
$time_AbrechnungsStart = mktime(0,0,0,date("m"),1,date("Y"));
$time_AbrechnungsEnde = $time_AbrechnungsStart + ($int_Laufzeit*24*60*60);
// Andernfalls muss der individuelle Abrechungszeitraum ---
// ermittelt werden ---------------------------------------
} else {
// Prüfen, ob das aktuelle Datum mit dem Beginn eines neuen
// Abrechnungszeitraums zusammenfällt ---------------------
if(date("d", $time_Freischaltung) == date("d")) {
// Fällt zusammen, also beginnt der neue Abrechnungs-
// zeitraum heute
$time_AbrechnungsStart = mktime(0,0,0,date("m"), date("d"), date("Y"));
// Wenn es nicht zusammenfällt, muss das Datum berechnet ---
// werden --------------------------------------------------
} else {
// Den korrekten Monat berechnen. --------------------
// Wenn zum Tag der Freischaltung und dem aktuellen --
// Monat die Laufzeit addiert wird, liegt das aktuelle
// Datum dann noch drin? Wenn ja, wird der aktuelle --
// Monat genommen, andernfalls wird der letzte Monat -
// genommen. -----------------------------------------
// Gleichzeitig wird das Jahr berechnet. Wenn der ----
// aktuelle Monat "Januar" ist und das Datum nicht ---
// im Zeitraum liegt, dann wird das vorherige Jahr ---
// verwendet, andernfalls das aktuelle Jahr ----------
if((mktime(0,0,0, date("m"),date("d",$time_Freischaltung), date("Y")) + $int_Laufzeit/24/60/60) <
mktime(0,0,0,date("m"),date("d"),date("Y"))) {
$time_Monat = date("m"); // Liegt im Zeitraum
$time_Jahr = date("Y");
} else {
$time_Monat = date("m")-1; // Liegt nicht drin
if($time_Monat == "01")
$time_Jahr = date("Y")-1;
else
$time_Jahr = date("Y");
}
$time_AbrechnungsStart = mktime(0,0,0, $time_Monat, date("d",$time_Freischaltung), $time_Jahr);
}
// Nun wird das Enddatum des aktuellen Abrechnungszeit-
// raums berechnet. Dazu wird zum Startdatum einfach die
// Laufzeit hinzuaddiert.
$time_AbrechnungsEnde = $time_AbrechnungsStart + ($int_Laufzeit*24*60*60);
}
// Rückgabe der beiden Werte
return array($time_AbrechnungsStart, $time_AbrechnungsEnde);
Wenn sich der Kunde am 15.3. angemeldet hat, dann wären wir
15.3. + 14 = 29.3.
29.3. + 14 = 12.4.
12.4. + 14 = 26.4
Heute ist der 17.4., wird sind also im Intervall vom 12.-26.4. Das Script oben zeigt aber den 15.4. bis 29.4 an. Es wird zwar der Starttag genommen, aber eben nicht dazugezählt.
Wie kann man das elegant lösen?? Hat da jemand schon was?
1000 Dank!
strauberry
Kommentar