Geburtsdatumausgabe (Alter) falsch berechnet?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Abend Zusammen,


    ich habe versucht, bei meinem Registersystem, die Berechnung aus dem Geburtsdatum ausgeben zu lassen bzw. diese zu speichern. Dennoch misslingt mir dies bis jetzt. Wenn ich beispielsweise angebe, dass ich am "29.04.1990" geboren bin, zeigt er mir als Resultat "-1973" an. Ich habe bis jetzt noch keine Ahnung, wie ich dies beheben kann.



    if(dialogid==DIALOG_Jahre)
    {
    new tag, monat, jahr;
    getdate(tag, monat, jahr);
    new DatumInfo[3][20];
    split(inputtext, DatumInfo, '.');
    if(response==1)
    {
    if(strlen(inputtext) > 10)
    {
    ShowPlayerDialog(playerid,DIALOG_Jahre,DIALOG_STYLE_INPUT,"Jahre","ANGABEFEHLER: Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter","");
    }
    if(!IstDatumGueltig(strval(DatumInfo[0]),strval(DatumInfo[1]),strval(DatumInfo[2])))
    {
    ShowPlayerDialog(playerid,DIALOG_Jahre,DIALOG_STYLE_INPUT,"Jahre","ANGABEFEHLER: Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter","");
    }
    if(jahr - strval(DatumInfo[2]) > 60 || strval(DatumInfo[2]) < 10 || strval(DatumInfo[2]) >= jahr)
    {
    ShowPlayerDialog(playerid,DIALOG_Jahre,DIALOG_STYLE_INPUT,"Jahre","ANGABEFEHLER: Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter","");
    }
    new check = jahr - strval(DatumInfo[2]);
    if(check == jahr)
    {
    ShowPlayerDialog(playerid,DIALOG_Jahre,DIALOG_STYLE_INPUT,"Jahre","ANGABEFEHLER: Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter","");
    }
    if(strval(DatumInfo[1]) > monat)
    {
    check -= 1;
    }
    else if(strval(DatumInfo[1]) == monat && strval(DatumInfo[0]) > tag)
    {
    check -= 1;
    }
    new string[128];
    SetPVarInt(playerid,"Jahre",check);
    format(string,sizeof(string),"Du hast angegeben, dass du %d Jahre alt bist.",GetPVarInt(playerid,"Jahre"));
    SendClientMessage(playerid,gelb,string);
    BLABLABLA - Nächster Dialog wird angezeigt
    }
    }


    Wenn noch etwas benötigt wird, sagt mir Bescheid. Danke im Voraus und für die Fußballer unter uns, einen schönen Abend!


    PUSH #1!

    Einmal editiert, zuletzt von MrJokazMan ()

  • Warum denn so kompliziert ?
    Lies von ihm doch einfach den Tag, Monat und Jahr aus und fang dann an zu rechnen.
    new alter = heutigermonat - angegebenermonat;
    if(heutigermonat < angegebenermonat) alter--;
    else if(heutigermonat == angegebenermonat)
    {
    if(heutigertag != angegebenertag) alter--;
    }

  • HIlft mir nicht unbedingt weiter... ich möchte lediglich wissen, wie das richtige Alter am Ende herauskommt. Hat jemand Ideen, wie ich das fixxen kann?

  • Ich habe mich mal an das ganze mit PHP gewagt um wirklich was haargenaues rauszubekommen.
    Also eben warst du ganz genau so alt:

    Zitat

    22.158447488584


    Das sagt mir PHP, mein Script dazu (falls du damit was anfangen willst/kannst):

    PHP
    <?php
    $Jahr = 1990;
    $Monat = 04;
    $Tag = 29;
    $Jetzt = getdate();
    $ResultDate = ($Jetzt["year"] - $Jahr + (($Jetzt["mday"] - $Tag) / 365) + (($Jetzt["mon"] - $Monat) / 12));
    echo round($ResultDate, 0);
    ?>


    Jetzt zum Pawnteil:
    new Jahr = strval(DatumInfo[2]),
    Monat = strval(DatumInfo[1]),
    Tag = strval(DatumInfo[0]),
    Year, Month, Day;
    getdate(Year, Month, Day);
    new Result = (Year - Jahr + ((Day - Tag) / 365) + ((Month - Monat) / 12));
    // Floatround o.ä.


    Hoffe ich hab dein Problem richtig verstanden & konnte dir helfen.

  • stock getAgeFromDate(birth_day, birth_month, birth_year)
    {
    new d, m, y; getdate(y, m, d);
    return ((m > birth_month) || (m == birth_month && d >= birth_day)) ? (y - birth_year) : (y - birth_year - 1);
    }