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