ilch Forum » Ilch Clan 1.1 » Fehlersuche und Probleme » fehlerhaftes Alters im Kallender bei N

Geschlossen
  1. #1
    User Pic
    neoLitic Mitglied
    Registriert seit
    21.09.2009
    Beiträge
    20
    Beitragswertungen
    0 Beitragspunkte
    Hallo liebe Community,


    habe leider nach dem Update auf version 1.1 N einen Fehler in der Altersberechnung im Kalender.

    Meine Daten in der DB stimmen und auch die calender.php Daten sind richtig.

    Nur sollte er bei der Angabe 1989-10-20 ja sagen userxy hat seinen 20 Geburtstag. Wo aber leider 19 steht.

    Bei anderen Usern stimmt die Berechnung aber z.B. 1990-09-06 = 19 .


    In der Version 1.1 M wurde das aber schon korrekt angezeigt.
    Seit dem Update haben keine weiteren Addon Installation stattgefunden.

    Über eure Hilfe wäre ich sehr dankbar.


    MfG

    neoLitic

    PS: Die alten Threads zu dem thema haben mich leider nicht weiter gebracht.


    verwendete ilchClan Version: 1.1

    betroffene Homepage: max.exotic-radio.de
    Fachinformatiker
    und kein Programmierer ... sorry zunge
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Fire86 Mitglied
    Registriert seit
    25.04.2009
    Beiträge
    543
    Beitragswertungen
    0 Beitragspunkte
    Ist mir auch schon aufgefallen, der Fehler ist schnell lokalisiert.
    Bei der Altersberechnung der neuen kalender.php fließt lediglich das Jahr, nicht aber Monat und Tag in die Berechnung ein, das führt natürlich zu falschen Ergebnissen.
    $alter = date('Y') - $y;
    if ($date > $jetzt) { $alter = $alter - 1; }


    Hier eine Funktion, die ich mal für eigene Zwecke geschrieben hatte (selbstverständlich mit exakter Berechnung des Alters zwinker )
    Eventuell hilft es ja dem einen oder anderen weiter.
    // Altersberechnung wahlweise für uid oder Wert der Form YYYY-MM-DD
    function getage($uid=0, $value=0) {
        $age = 'keine Angabe';
        if ($uid > 0) {
    		$erg = @db_result(db_query("SELECT `gebdatum` FROM `prefix_user` WHERE `id` = ".$uid),0);
    		if (!empty($erg) AND $erg != '0000-00-00') {
    			$v = explode('-',$erg);
    			$gebstamp = $v[0].$v[1].$v[2];
    			$age = floor((date('Ymd') - $gebstamp) / 10000);
    		}
        }
        elseif ($value != 0 AND $value != '0000-00-00') {
    	  $v = explode('-',$value);
    	  $gebstamp = $v[0].$v[1].$v[2];
    	  $age = floor((date('Ymd') - $gebstamp) / 10000);
        }
       return $age;
    }



    Zuletzt modifiziert von Fire86 am 21.09.2009 - 14:23:04
    Kein Support per Email oder ICQ!
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    neoLitic Mitglied
    Registriert seit
    21.09.2009
    Beiträge
    20
    Beitragswertungen
    0 Beitragspunkte
    Hallo Fire86,

    2 Fragen an der stelle:


    1. Wo hast du die ersten beiden Codezeilen her? Genauer Pfad bitte da es ja 2 kalender.php Dateien gibt ich es aber in keinder finden kann.

    und

    2. In welche Datei und an welcher stelle soll ich deine Berechnung einfügen? Bzw. welchen Codeteil dafür ersetzten?

    Vielen dank schon mal im vorraus aber ich blick es im Moment auf die schnelle nicht.

    MfG

    neoLitic
    Fachinformatiker
    und kein Programmierer ... sorry zunge
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Fire86 Mitglied
    Registriert seit
    25.04.2009
    Beiträge
    543
    Beitragswertungen
    0 Beitragspunkte
    Das ist die neue kalender.php aus dem include/contents/ Ordner, Zeile 83 und 84.

    Meine Funktion ist jetzt etwas zusammenhangslos und sollte eigentlich nur verdeutlichen, wie man das Alter auf den Tag genau berechnen kann. (Für den/die Entwickler :P)

    Um die ganze Sache zu bereinigen, ersetze die beiden Zeilen einfach mit
    $alter = floor((date('Ym') - ($y.$m)) / 100);
    if ($date > $jetzt) { $alter = $alter + 1; }

    Damit sollten die Geburtstage im Kalender wieder richtig berechnet werden.


    Alternativ kannst du auch meine Funktion in die include/includes/func/user.php packen und dann die Zeile ersetzen mit
    $alter = getage('',$r['gebdatum']);
    if ($date > $jetzt) { $alter = $alter + 1; }



    Gruß


    Zuletzt modifiziert von Fire86 am 21.09.2009 - 16:43:53
    Kein Support per Email oder ICQ!
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Also bei mir steht
    $date  = mktime(0,0,0,$m,$d);
    	$jetzt = time();
    	$alter = date('Y') - $y;
    	if ($date > $jetzt) { $alter = $alter - 1; }
    drin und funktioniert auch (bei mir xammp), und ich wüsste ehrlich gesagt nicht, warum der irgendwo nicht funktionieren soll, da es sich um gültige Timestamps handelt.


    Zuletzt modifiziert von Mairu am 21.09.2009 - 19:19:50
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Fire86 Mitglied
    Registriert seit
    25.04.2009
    Beiträge
    543
    Beitragswertungen
    0 Beitragspunkte
    Die Timestamps stimmen natürlich, aber die Formel nicht, sieh mal genau hin.
    Zeile 4 ist falsch. zwinker

    So wie es jetzt ist, wird im Kalender immer das Alter berechnet, das der User VOR seinem Gebu hat.
    Kein Support per Email oder ICQ!
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    neoLitic Mitglied
    Registriert seit
    21.09.2009
    Beiträge
    20
    Beitragswertungen
    0 Beitragspunkte
    Also erstmal vielen Dank an dich Fire86,

    nach der Änderung der Formel werden jetzt mal alle Geburtstage richtig berechnet.

    Ich habe aber nur die Zeilen 83 und 84 abgeändert.

    Das soll erstmal für den Anfang reichen.


    Wünsche noch einen schönen Abend und nochmal vielen Dank für die schnelle und tolle Hilfe.


    MfG

    neoLitic
    Fachinformatiker
    und kein Programmierer ... sorry zunge
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Also wenn ich z.B. am 3. März 1990 geboren bin und wir haben 2009.

    Dann rechne ich 2009 - 1990 = 19

    Jetzt rechne ich den Timestamp von 3. März aus, wenn der größer ist als der aktuelle ziehe ich ein Jahr ab, weil ich ja an dem 3. März in dem Jahr erst 19 werde, keine Ahnung, was daran falsch sein soll.

    Auch wenn ich mich jetzt blamiere, ich kann keinen Fehler entdecken.

    PS: Ok ich geb zu jetzt fällts mir auf, ich mach ne alters Berechnung für den aktuellen Tag, aber man wird ja in einem Jahr immer gleich alt, also reicht einfach $alter = date('Y') - $y;, der Rest kann weg.

    Sprich ab Zeile 79 dann
    	list($y,$m,$d) = explode('-',$r['gebdatum']);
    	$date  = mktime(0,0,0,$m,$d);
    	$alter = date('Y') - $y;
    	$row = array(

    Also sehr viel weniger kompliziert zwinker


    Zuletzt modifiziert von Mairu am 22.09.2009 - 09:20:47
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Fehlersuche und Probleme

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten