[PHP] - Tage zwischen zwei Daten zählen mit Bedingung
-
Hallo Zusammen..
Ich möchte zwischen einem Fälligkeitsdatum und dem heutigen Datum die Tage bestimmen. Sind die Tage dazwischen bis und mit heute genau null oder 2, dann sollte der Status "fällig" angezeigt werden. Sind die Tage dazwischen noch über 0 oder 2, sollte der Status "offen" angezeigt werden. Wenn Anzahl tage aber schon 35 ergibt der status dann "mahnung" anzeigen.
Problem:
Die Berechnung der Tage funktioniert, aber nur, wenn das Fälligkeitsdatum VOR dem aktuellen Datum liegt. Ist heute der 9. Januar aber die Fälligkeit erst am 8. Februar, sind dies nach vorn gerechnet auch mehr als 30 Tage und genau das ist das Problem.Ich müsste irgendwie überprüfen ob es dann +30 Tage oder -30 Tage vom Fälligkeitsdatum wären??
$timeA = '21.02.09'; //Fälligkeitsdatum $timeB = date("d.m.y"); $tage = seDay($timeA,$timeB,"dmy","."); if(($tage == "0") || ($tage == "2")) { $status = '<font color="#FF4C00">Fällig</font>'; } else if($tage <= "30") { $status = '<font color=red>Mahnung</font>'; } else { $status = '<font color=green>'.$rowrech['Rstatus'].'</font>'; }
Wenn ich schon dabei bin zu Fragen... Wie kriege ich es hin die formaiteren Währungen (Beispiel: subtotal,2,'.','') ) auf genau fünf Rappen hoch oder abzurunden? Wir schweizer können ja keine Beträge wie 25.66 bezahlen oder 91.92.- . Mit number_format kriege ich die Dezimalstellen genau auf zwei Zahlen hinter dem Punkt. Will heissen wenn ich nur 6 reinschreibe dann shreibt php automatisch daraus 6.00. Soweit so gut. Hab ich nun ein Ergebnis von 6.27 sollte der mir das auf 6.30 aufrunden, bei 6.25. stehen lassen und bei 6.24 abrunden auf 6.20.
Wie mach ich das? Versuchte schon die Funktion round, brachte mich aber nicht gerade weiter.
-
wtf ist seDay()?
Alles, was du brauchst, sind mktime() und time(). Dann kannst du ganz wunderbar die Differenz berechnen.
Du willst wissen, welches Datum vor welchem liegt? Kein Problem mit den Timestamps.
P.s. Dein HTML ist ein Graus. Lies dir da mal einige einführende Grundlagen durch. So etwas wie
<font color=green>
gehört verboten
-
árn[y]ék schrieb:
wtf ist seDay()?
Alles, was du brauchst, sind mktime() und time(). Dann kannst du ganz wunderbar die Differenz berechnen.
Du willst wissen, welches Datum vor welchem liegt? Kein Problem mit den Timestamps.
P.s. Dein HTML ist ein Graus. Lies dir da mal einige einführende Grundlagen durch. So etwas wie
<font color=green>
gehört verbotenWie stell ich das am besten an? Denn das Zählen der Tage geht schon Problemlos, alledings funktioniert das, was ich will nicht ganz genau.
Es sollte überprüft werden ob das Fälligkeitsdatum noch NICHT 30 Tage überschritten hat, genau 30 Tage ist oder über 30 Tage ist.
Beispiel:
Fälligkeitsdatum: 01.12.08
Heute haben wir den 09.01.09 , das heisst, schon 37 Tage. Also 7 Tage über der Frist.. somit sollte "Mahnung" kommen...Sind es nur 32 oder genau 30 Tage dann die Meldung "Fällig" und ansonsten, wenn die 30 Tage noch nicht erreicht sind "offen".
Hab es schon versucht mit if ( $tage <= >= usw.. komm net weiter..
Das mit dem HTML weiss ich... wenn ich in PHP was kurz testen will schaue ich nicht auf die Codierung. Erst beim definitiven einbau schaut es dann auc handers aus.
-
mktime und time geben dir das Datum als Unix-Timestamp zurück, also als Anzahl von Sekunden seit Beginn der Unix-Zeitrechnung
Diese wieder in Tage umzurechnen sollte kein Problem sein
also grob gesagt bei dir (hab lang kein PHP mehr gemacht)
$curTime = time(); // aktuelles Datum $dueTime = mktime( 0, 0, 0, 12, 1, 2008 ); // der 1.12.08 um 0:00:00 Uhr function secToDays( $secs ) { return floor( ( secs / 3600 / 24 ) + 0.5 ); } $diff = secToDays( $dueTime - $curTime ); if ( $diff < 30 ) { $status = "Mahnung"; } else if ( $diff == 30 ) { $status = "Fällig"; } else { $status = "Offen"; }
sollte in etwa so stimmen
-
Sorry wenn ich schon wieder nerve, aber auch das ist NICHT das , was ich suche!
Klar, wenn $diff weniger als 30 Tage dann "Mahnung" und wenn gleich dann "Fällig" und sonst "Offen"... aber:
Hab ich das Fälligkeitsdatum auf den 11.01.09 stehen, dann kommt MAhnung.. (sollte aber fällig sein, da heute ja der 11.01. ist )
Steht 06.01.09 kommt Mahnung (so ist s korekt)
steht aber 15.02.09 oder 18.01.09 sollte eigentlich der Status offen kommen, was aber nicht der Fall ist, er schreibt noch immer "mahnung".
Das Datum hab ich aber so in der SQL_Drin:
01.01.09 (Als beispiel) und nicht mit mktime... umwandeln geht das?
lg
WOlf
-
Ok. Problem liegt am $diff.. doch warum $diff immer nur 0 anzeigt, verstehe ich nicht....
<?php $timeA = $rowrech['rdat']; $timeB = $rowrech['faell']; $ar = explode (".", $timeB); $timestamp = mktime(0,0,0, $ar[1], $ar[0], $ar[2]); $newDate = date("d.m.y", $timestamp); if($rowrech['Rstatus'] == "bezahlt") { $status = $rowrech['Rstatus']; } else { $curTime = time(); // aktuelles Datum $dueTime = mktime( 0, 0, 0, 12, 1, 2008 ); // der 1.12.08 um 0:00:00 Uhr function secToDays( $secs ) { return floor( ( secs / 3600 / 24 ) + 0.5 ); } $diff = secToDays( $dueTime - $curTime ); echo "Aktuelles Datum: ".$curTime; echo "<br />Fälligkeitsdatum: ".$dueTime; echo "<br />Differenztage: ".$diff; if ( $diff < 30 ) { $status = "Mahnung"; } else if ( $diff == 30 ) { $status = "Fällig"; } else { $status = "Offen"; } } ?>
-
Es geht nun!! Hat geklappt! Das erste Problem war, dass $diff-Variable immer 0 war und keinen WErt hatte (aufgrund dem Abstand zwischen $dueDate - $cur Date.. richtig wäre curDate ohne Abstand). Danach überprüfe ich nur noch $diff ob grösser als 0 und fertisch!!
Danke euch: ) Wens trotzdem interessiert hier der Code:
$timeA = $rowrech['rdat']; $timeB = $rowrech['faell']; $ar = explode (".", $timeB); $timestamp = mktime(0,0,0, $ar[1], $ar[0], $ar[2]); $newDate = date("d.m.y", $timestamp); if($rowrech['Rstatus'] == "bezahlt") { $status = $rowrech['Rstatus']; } else { $curTime = time(); // aktuelles Datum $dueTime = $timestamp; // der 1.12.08 um 0:00:00 Uhr function secToDays( $secs ) { return floor( ( $secs / 3600 / 24 ) + 0.5 ); } $diff = secToDays($dueTime -$curTime); $datum = date("d.m.y"); echo "Aktuelles Datum: ".$curTime; echo "<br />Fälligkeitsdatum: ".$dueTime; echo "<br />Differenztage: ".$diff; if ( $timeB == $datum) { $status = "Fällig"; } else if( ($diff < 0) && ($diff > -7)) { $status = "Fällig"; } else if( $diff > 0) { $status = "Offen"; } else if ( $diff < 30 ) { $status = "Mahnung"; } else { $status = "Offen"; } }