Komplexes (Timestamp)

kwalke

Grünschnabel
Hallo,

ich habe ein kleines Problem. Und zwar bekomme ich es einfach nicht hin, das das Datum + 1,2,3 etc... Monate ausgegeben wird.

Code:
$todayx = time();
$today = $todayx;

$res = mysql_query("SELECT timestamp FROM billings") or die(mysql_error());
while ($row = mysql_fetch_object($res)) {
    if ($row->timestamp < $today) {
$t = date("t");
$ls = $t * 86400;
$timestamp = $row->timestamp + $ls;
$d=$today  - $timestamp;
$datumx = $d/86400;
$datum = round ($datumx);
        echo "in $datum";
    } else {
$t = date("t");
$ls = $t * 86400;
$timestamp = $row->timestamp + $ls;
$d=$today  - $timestamp;
$datumx = $d/86400;
$datum = round ($datumx);
        echo "seit $datum";
    }
    echo  ' Tagen fällig<br />';
}

Das Problem ist nun, dass es nur bei einem Monat funktioniert, wenn man als "wdh" in der SQL Datenbank z.B. 4 Monate angibt, müssen ja auch die Tage ausgegeben werden, wie lange es noch gültig ist, bis die neue Rechnung gestellt werden muss.
Denn es hat ja nicht jeder Monat die gleiche Anzahl von Tagen.

:rolleyes:
 
Dann solltest du besser ein fixes Datum statt der schwammigen Angabe der Anzahl der Monate nehmen.
 
PHP:
<?php

function masterdate($date){

$datum = explode(".", $date);
$timestamp = mktime("23","59","59",$datum[1],$datum[0],$datum[2] );
$today = time();
$differenz = $timestamp-$today;

if("0" < $differenz){
$abgabe = date("z", $differenz);

if($abgabe == "0"){
echo "Abgabe ist heute fällig!<br/>";
}else{
echo "Abgabe in $abgabe Tagen fällig!<br/>";
}

}else{

$differenz = $differenz*(-1);
$abgabe = date("z", $differenz);
echo "Abgabe seit $abgabe Tagen fällig!<br/>";
}

}

masterdate("25.06.2007"); // --> datum in funktion einsetzen
masterdate("25.08.2007"); // --> datum in funktion einsetzen
masterdate("25.09.2007"); // --> datum in funktion einsetzen

?>

folgendes Script gibt dir dann diese Ausgabe hier aus
Abgabe seit 61 Tagen fällig!
Abgabe ist heute fällig!
Abgabe in 31 Tagen fällig!
Na wie gefällt dir das?
 
Zuletzt bearbeitet:
Danke gut. Werden auch die Tage berücksichtigt (Monatstage?)... denn manche Monate haben ja nur 28 Tage oder manche 31.
 
Bei meiner Variante schon -.-
Das ist auch der Vorteil bei dieser Variante

Du könnte das ganze auch noch umwandeln, dass du je nach Art auch die verbleibenden Monate und Jahre herausbekommst ...
 
Naja irgendwie krieg ich das nicht hin, denn da muss noch "wdh" (Sql Spalte) in billings, das gibt die Monate an, z.B. 1 = 1 Monat

Und dann soll es in der tpl datei als Variable alles ausgegeben werden.

habe es nun so:

Code:
function masterdate($date){

$datum = explode(".", $date);
$timestamp = mktime("11","08","07",$datum[1],$datum[0],$datum[2] );
$today = time();
$differenz = $timestamp-$today;

if("0" < $differenz){
$abgabe = date("z", $differenz);

if($abgabe == "0"){
echo "Abgabe ist heute fällig!<br/>";
}else{
echo "Abgabe in $abgabe Tagen fällig!<br/>";
}

}else{

$differenz = $differenz*(-1);
$abgabe = date("z", $differenz);
echo"Abgabe seit $abgabe Tagen fällig!<br/>";

}

}

  $abfrage = "SELECT * FROM billings WHERE wdh_set=''";
  $ergebnis = mysql_query($abfrage);
  while($row = mysql_fetch_object($ergebnis))
    {

    $ausgabe = masterdate("$row->date");

    }
 
Naja bei meiner Version kannst du zwar auch mit Monaten arbeiten, aber ich bin jetzt von einem Datum ausgegangen ...

Somit könnte die Datenbank dann wie folgt aufgebaut sein
| id | datei | date |
------------------------------
| 0 | eins | 25.06.2007 |
| 1 | zwei | 15.09.2007 |
| 2 | zwei | 1.01.2008 |
und so weiter


Wenn du mit Monaten arbeiten willst alla so einer Tabelle
| id | datei | date |
------------------------------
| 0 | eins | 4 |
| 1 | zwei | 1 |
| 2 | zwei | 2 |
und so weiter
So kannst du nicht einfach mein Script hernehmen, sondern musst es ein weniger verändern. Schreib einfach wie du es jetzt machen wirst und willst und dann können wir dir weiter helfen.
 
Sie ist so aufgebaut:

id, date (xx.xx.xxx), timestamp, wdh (Monate), wdh_set (ob die rechnung gestellt wurde).


Wenn wdh_set = 1 ist, dann soll es nicht mehr angezeigt werden. Wenn nix drin steht in wdt_set, soll es verwendet werden. wdh gibt die Monate an, z.B. 2 dann soll wenn bei date 01.09.2007 steht die tage bis zum 01.11.2007 ausgegeben werden. Das andere wie gehabt.

Es soll dann halt so sein, dass ich es alles in einer variable speichern kann (z.B. $show) und dann soll eine tabelle mit informationen in der tpl ausgegeben werden.


Ihr seit voll nett
 
Ok dann schau mal bitte ob dieser Code funktioniert.
Hab das ganze nochmal ein wenig umgeschrieben und verbessert, so dass das ganze auch über Jahre gehen könnte. Sollten also mal 14 Monate oder so dazwischen liegen, wäre dass kein Problem mehr :)

So nun zum Code
PHP:
<?php

function masterdate($date, $monate){

//unser Abfrage-Datum
$datum = explode(".", $date);
$datum[1] = $datum[1]+$monate;


//Prüfen ob wir ein Jahr überschreiten --> über 12 Monate haben
$gsrightdate = $datum[1]/12;
$gsrightdate = floor($gsrightdate);
$datum[1] = $datum[1]-(12*$gsrightdate);
$datum[2] = $datum[2]+$gsrightdate;


//Timestamp vom Datum und Heute
//Prüfen welches Jahr wir haben
//Differenz ermitteln (Abfrage-Datum und Heute)
$timestamp = mktime("23","59","59",$datum[1],$datum[0],$datum[2] );
$today = time();
$year = date("Y");
$differenz = $timestamp-$today;


//ist Differenz größer als null und ist derzeitiges Jahr größer/gleich Abfrage-Jahr
if("0" < $differenz  && $year <= $datum[2]){
$abgabe = date("z", $differenz);


//Sind die Tage bis Abfrage-Datum gleich Null --> ist Abfrage heute?
if($abgabe == "0"){
echo "Abgabe ist heute fällig!<br/>";
}else{

//Abfrage der Tage --> sind Jahre dazwischen * dei Jahre
$abgabe = $abgabe+(365*$gsrightdate);
echo "Abgabe in $abgabe Tagen fällig!<br/>";
}

}else{ // --> ist Datum schon vorbei!?


//dann schon vergangene Tage errechnen
$differenz = $differenz*(-1);
$abgabe = date("z", $differenz);
$abgabe = $abgabe+(365*$gsrightdate);
echo "Abgabe seit $abgabe Tagen fällig!<br/>";
}
}


ob_start(); // --> Ausgabepuffer aktivieren --> Ausgabe erst bei $show
  $abfrage = mysql_query("SELECT * FROM billings WHERE wdh_set=''"); 
  while($row = mysql_fetch_array($select))
    {
    masterdate($row["date"], $row["wdh"]);
    }
$show = ob_get_clean(); 


echo $show; //Ausgabe ^^
?>

So das mit der Variable haben wir nun erledigt.
Müsste nun gehen was du willst :)
 
Zuletzt bearbeitet:
Zurück