Mit Datum die Differenz in Tage ausrechnen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
beitrag
board
date
daten
day
dez
differenz
durchschneiden
ergebnis
funktion
jahr
jul
kalender
letzte mal
mai
manual
monat
mr
schaltjahr
sekunde
- 
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden! lima-city: Gratis werbefreier Webspace für deine eigene Homepage 
- 
    
    Ich schätze, du meinst z.b. 25-04-2004
 also quasi den 25. April 2004.
 
 Prinzipiell kannst du das über den timestamp machen.
 
 <?php $datum = '20-04-2004'; $arrDatum = explode('-',$datum); $date1 = mktime(0,0,0,$arrDatum[1],$arrDatum[0],$arrDatum[2]); $date2 = time(); $zeit = $date2-$date1; $tage = floor($zeit/86400); echo $tage; ?>
 
 http://www.selfphp.de/funktionsreferenz/string_funktionen/explode.php
 http://www.selfphp.de/funktionsreferenz/datums_und_zeit_funktionen/mktime.php
- 
    
    Schau doch einfach mal in den Ticker oder auf die Startseite:
 http://www.lima-city.de/boards/thread/63496
 
 
 gruß
 ferdinand24
- 
    
    Angemerkt ferdinand24! Aber da gibt es noch eine Frage, die im anderen Thread nicht drin ist:
 
 Jo ok. Aber da gäbe es noch ein Problem mit Februaren. Man weiß ja
 
 Schaltjahr:
 Jan 31 Tage
 Feb 29 Tage
 Mär 31 Tage
 Apr 30 Tage
 Mai 31 Tage
 Jun 30 Tage
 Jul 31 Tage
 Aug 31 Tage
 Sep 30 Tage
 Okt 31 Tage
 Nov 30 Tage
 Dez 31 Tage
 
 Kein Schaltjahr
 
 Jan 31 Tage
 Feb 28 Tage
 Mär 31 Tage
 Apr 30 Tage
 Mai 31 Tage
 Jun 30 Tage
 Jul 31 Tage
 Aug 31 Tage
 Sep 30 Tage
 Okt 31 Tage
 Nov 30 Tage
 Dez 31 Tage
 
 Beitrag geändert: 7.7.2007 16:40:44 von fly-europe
- 
    
    Da du den vorgeschlagenen Berechnungen über die Sekundenanzahl gehst, spielen Schaltjahre keine Rolle. Ein Tag hat immer 86400 (=60*60*24) Sekunden. Egal, ob 29. Februar oder nicht, der Timestamp läuft immer weiter.
- 
    
    zur erkärung: der timestamp ist die zeit in sekunden die seit 1.1.1970 vergangen ist (bin mir da nicht so sicher mit dem datum). jede sekunde wird zum timestamp eine sekunde hinzugefügt. damit ist es ganz einfach tagedifferenzen zu berechnen, da ein tag genau 86400 sekunden hat ;)
- 
    
    Man kann sich das Timestamp-Schaltjahr-irgendwas-Gewurschtel sparen, wenn man die Kalender-Funktionen benutzt. Die rechnen rückwirkend bis 1583 richtig und weit in die Zukunft ebenfalls. Da kommt kein Timestamp mit.
 
 http://de.php.net/manual/de/ref.calendar.php
 
 // Datum 1: $j1 = 2004; // Jahr $m1 = 4; // Monat $t1 = 25; // Tag im Monat // Datum 2 list($j2, $m2, $t2) = explode('-', date('Y-n-j')); $jdn1 = gregoriantojd($m1, $t1, $j1); $jdn2 = gregoriantojd($m2, $t2, $j2); $day_diff = $jdn2 - $jdn1; printf('Der Abstand beträgt %s Tage.', $day_diff);
 
 http://de.php.net/manual/de/function.gregoriantojd.php
 
 Das Ganze funktioniert aber nur, wenn die Kalender-Erweiterung auch installiert ist. Das sollte bei normalen PHP-Installationen so sein, aber auf'm Lima-Webspace fehlt sie aus (mir) unerklärlichen Gründen ...
- 
    
    OK Danke. Mir kommt es hauptsächlich darauf an, wann der User das letzte Mal online gewesen ist, vor wie vielen Tagen
- 
    
    Und das ganze mit der Zeit?!? Geht das genauso?
 
 <?php $time1 = strtotime('17:13'); //oder 17-13 für 17:13Uhr $time2 = time(); print floor(($time2-$time1)/60); //und hier auf 60 Sekunden ändern ?>
 
 Wäre das so richtig und machbar?
 
 Beitrag geändert: 27.7.2007 12:44:09 von fly-europe
- 
    
    So, ich habe jetzt einen Timestamp. Supi aber kann man nun auch das ganze wieder rückgängig machen (auf den Tag genau)?
- 
    
    
 fly-europe schrieb: 
 So, ich habe jetzt einen Timestamp. Supi aber kann man nun auch das ganze wieder rückgängig machen (auf den Tag genau)?
 
 Ja, kann man: http://de.php.net/manual/de/function.date.php
 
 //edit: ... wenn ich Deine Frage richtig interpretiert habe ...
 
 Beitrag geändert: 6.10.2007 21:42:11 von compactdisc
- 
    
    Hm. Ja also ich sehe da nichts, was mir weiterhelfen könnte. Du könntest ja mal Zitieren, was mir weiterhelfen sollte ;)
- 
    
    Worauf willst du eigentlich hinaus???
 OK Danke. Mir kommt es hauptsächlich darauf an, wann der User das letzte Mal online gewesen ist, vor wie vielen Tagen Die Differenz von dem aktuellen Timestamp MINUS dem Timestamp, als der User das letzte Mal online war, berechnen.
 
 Diese Differenz durch 864000 teilen und du hast die Tage.
 
 Falls du nicht nur die Tage wissen willst, sondern auch Stunden, Minuten, usw.:
 
 http://www.lima-city.de/boards/thread/59143/10/0
 
 Das ist zwar Java, es geht aber in PHP fast genauso.
 
 Nur musst du noch floor benutzen, da PHP nicht typensicher ist, wir aber Integer brauchen.
 
 diff ist die Differenz der beiden Zeitstempel.
 $seconds = floor($diff % 60); $tmp = $diff / 60; $minutes = floor($tmp % 60); $tmp = floor($tmp / 60); $hours = floor($tmp % 24); $days = floor($tmp / 24);
 
 Jetzt hast du die Zeitdifferenz in Tagen, Stunden, ... in den Variablen days, hours, ... .
- 
    
    Ja aber floor() errechnet doch den Durchschnitt und nicht das Ergebnis aus ;) oder? Das war am Anfang auch meine Idee.
 Also rundet auf oder ab.
 
 Beitrag geändert: 12.10.2007 17:29:57 von fly-europe
- 
    
    
 
 fly-europe schrieb: 
 Ja aber floor() errechnet doch den Durchschnitt und nicht das Ergebnis aus ;) oder? Das war am Anfang auch meine Idee.
 Also rundet auf oder ab.
 
 Beitrag geändert: 12.10.2007 17:29:57 von fly-europe
 
 floor() wird zum Abrunden verwendet. => http://de.php.net/manual/de/function.floor.php
 ... und damit Du das Datum nicht "von Hand" berechnen musst => http://de.php.net/manual/de/function.date.php
- 
    
    Und da wäre noch was: Die Zurückverfolgung von Tagen und Stunden hilft leider mir leider nicht ganz weiter. Ich brauche ein Daten. ZB.
 
 $day = 12;
 $month = 10;
 $year = 2007;
- 
    
    Ich sehe gerade, dass floor() ein paar mal an einer falschen Stellen war.
 So ist es richtig:
 $seconds = $diff % 60; $tmp = floor($diff / 60); $minutes = $tmp % 60; $tmp = floor($tmp / 60); $hours = $tmp % 24; $days = floor($tmp / 24);
 
 Es geht aber auch ohne die floor() Funktion:
 
 $seconds = $diff % 60; $tmp = $diff - $seconds; $tmp = $tmp / 60; $minutes = $tmp % 60; $tmp = $tmp - $minutes; $tmp = $tmp / 60; $hours = $tmp % 24; $tmp = $tmp - $hours; $days = $tmp / 24;
 
 vielleicht ist das besser verständlich.
 
 Dann nochmal: du solltest dir wirklich angewöhnen deine Fragen etwas verständlicher zu formulieren.
 
 Was willst du????
 
 Wann der User das letzte Mal da war? => php-Funktion date() und ggf. mit list() und split() den String zerlegen, so dass du Jahr, Monat, Tag, usw. in einzelne Variablen bekommst.
 
 Vor wie vielen Tagen der User das letzte Mal online war => wie in meinem letzten Post beschrieben.
 
 ... und damit Du das Datum nicht "von Hand" berechnen musst => http://de.php.net/manual/de/function.date.php Das hatten wir schon...
 
- 
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden! lima-city: Gratis werbefreier Webspace für deine eigene Homepage 




