kostenloser Webspace werbefrei: lima-city


[PHP] Datums Problem -_-

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s*n

    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* :wink:.

    MfG
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage


  3. 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* :wink:.

    MfG


    Schon mal was von Schaltjahr geh?rt?

    Jens
  4. h*********5

    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?
  5. w****e

    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

  6. 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* :wink:.

    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 :wink:), 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
  7. Autor dieses Themas

    s*n

    ... *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. :wink:

    MfG
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!