[PHP] Datums Problem -_-
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
alt
beitrag
berechnung
daten
drehen
exaktes alter
geburtstag
gleicher monat
gleiches jahr
jahr
kurze spanne
manual
menschenleben
moment
rad
schaltjahr
schaltsekunde
schuld
sonderfall
umrechnung
-
Aloha,
also ich dreh langsam am Rad ... Schuld daran ist folgender Code:
$gbts = strtotime("30 May 1988"); $age = floor((time() - $gbts)/(3600*24*365)); echo $age;
Sprich ich will mein Alter ausrechnen. $gbts ist der Timestamp meines Geburtstages, welcher von dem Timestamp in diesem Moment subtrahiert wird und anschlie?end durch 3600*24*365 dividiert wird, also das Alter in Jahren.
Soweit sogut, jetzt werde ich also in 3 Tagen (heute der 27.05) 18, es wird aber nicht 17 ausgegeben sondern 18. Grml.
Vielleicht kann mir ja mal jemand helfen, ist ja schlie?lich schon sp?t *g?hn* .
MfG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Aloha,
also ich dreh langsam am Rad ... Schuld daran ist folgender Code:
$gbts = strtotime("30 May 1988"); $age = floor((time() - $gbts)/(3600*24*365)); echo $age;
Sprich ich will mein Alter ausrechnen. $gbts ist der Timestamp meines Geburtstages, welcher von dem Timestamp in diesem Moment subtrahiert wird und anschlie?end durch 3600*24*365 dividiert wird, also das Alter in Jahren.
Soweit sogut, jetzt werde ich also in 3 Tagen (heute der 27.05) 18, es wird aber nicht 17 ausgegeben sondern 18. Grml.
Vielleicht kann mir ja mal jemand helfen, ist ja schlie?lich schon sp?t *g?hn* .
MfG
Schon mal was von Schaltjahr geh?rt?
Jens -
Tipp: http://www.phpfuncs.org/?content=show&id=30
Was gibt es denn bei dem Schaltjahr zu beachten? Ist es nicht f?r die kurze Spanne eines Menschenlebens vernachl?ssigbar? -
php $gbts = strtotime("30 May 1988"); $age = floor((time() - $gbts)/(3600*24*365)); $age = floor($age-($age/4/365)); echo $age;
so und jetzt zur erkl?rung
$age=floor($age-($age/4/365));
hier wird von dem errechnetem Alter ohne Schaltjahre
die anzahl der Schaltjahre in Tagen abgezogen (alle 4 Jahre ein schaltjahr /4
nur einen Tag /365
und dann das ganze mit floor abgerunded. das einzigste was da jetzt nicht mitberechnet wird ist der ausfall der Schaltjahre alle 100 Jahre vobei das auch wieder alle 400 Jahre ausf?llt. wer sich da och was zum ausrechnen ausdenken will der ist herzlich dazu eingeladen. (n?tzlich bei der Berechnung des alters von Moses aber f?r normalsterbliche d?rfte das nicht viel ausmachen.
@hex434f4445 du siehst ja wenn du es genau haben willst dann kannst du das nicht vernachl?ssigen.
mfg
web4me
Beitrag ge?ndert am 27.05.2006 09:46 von web4me -
Aloha,
also ich dreh langsam am Rad ... Schuld daran ist folgender Code:
$gbts = strtotime("30 May 1988"); $age = floor((time() - $gbts)/(3600*24*365)); echo $age;
Sprich ich will mein Alter ausrechnen. $gbts ist der Timestamp meines Geburtstages, welcher von dem Timestamp in diesem Moment subtrahiert wird und anschlie?end durch 3600*24*365 dividiert wird, also das Alter in Jahren.
Soweit sogut, jetzt werde ich also in 3 Tagen (heute der 27.05) 18, es wird aber nicht 17 ausgegeben sondern 18. Grml.
Vielleicht kann mir ja mal jemand helfen, ist ja schlie?lich schon sp?t *g?hn* .
MfG
floor() "rundet" nicht, sondern schneidet den Ganzzahlanteil von einer Gleitkommazahl ab.
http://www.php.net/manual/de/function.floor.php
F?r solche Berechnungen ist es auch ungeeignet. Da bevorzuge ich intval(). Dein exaktes Alter kannst du mit dieser Formel sowieso nicht ausrechnen. Ich hab mal im Funpic-Forum eine gepostet, die halbwegs funktioniert. Guckst du hier:
/* Diese Funktion gibt ein Array zur?ck, dass den Abstand zwischen zwei Daten in Jahren, Monaten und Tagen enth?lt. Das Datum 1 muss kleiner oder gleich Datum 2 sein, sonst wird FALSE zur?ckgeliefert. */ function foxy_date_diff( $year1 = FALSE, $month1 = FALSE, $day1 = FALSE, $year2 = FALSE, $month2 = FALSE, $day2 = FALSE ) { /* if( !is_valid_year($year1) or !valid_year($year2) ) return(FALSE); if( !is_valid_month($month1) or !valid_month($month) ) return(FALSE); if( !is_valid_day_of_month($year1, $month, $day1) or !valid_day_of_month($year2, $month2, $day2) ) return(FALSE); */ if($year2 < $year1) return(FALSE); $days_in_month1 = foxy_days_in_month($year1, $month1); $diff_days = $day2 + $days_in_month1 - $day2; // Sonderfall: Gleiches Jahr if($year2 == $year1) { // Sonderfall: gleicher Monat $diff_months = 0; if($mont2 < $month1) return(FALSE); if($month2 > $month1) { if($day2 < $day1) return(FALSE); $diff_months = $month2 - $month1 - 1; $diff_days = $day2 - $day1; } $xx = 0; return( array(0, $diff_months, $diff_days) ); } // $diff_years = $year2 - $year1 - 1; $diff_months = $month2 + 12 - $month1; return( array($diff_years, $diff_months, $diff_days) ); }
Brauchst du genauere Berechnungen (unter Vernachl?ssigung der Schaltsekunden ), dann brauchst du entweder die calendar-Extension von PHP ...
http://de.php.net/manual/ref.calendar.php
..., die es auf Lima-Webspace leider nicht gibt:
http://alopex.pyrokar.lima-city.de/index.php/PHP/Info/Erweiterungen.html#nonincluded_extensions
Daf?r gibts aber meine (etwas angestaubte) Kalender-Bibliothek als Ersatz:
http://alopex.pyrokar.lima-city.de/index.php/PHP/Kalender.html
Dann kannst du mit der Umrechnung in die Julianische Tagesnummer die Abst?nde zwischen zwei Daten genau bestimmen.
Beitrag ge?ndert am 27.05.2006 13:56 von alopex -
... *Brett an Kopp hau*
Naja danke erstmal f?r die Antworten, jetzt wo das Problem gefunden ist, ist das Thema f?r mich erledigt (kann von mir aus geschlossen werden), werd mich jetzt an um ne L?sung bem?hen, sind ja bereits ein paar gute Sachen gepostet worden.
MfG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage