Geburtsdatum in Alter umwandeln.

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
  • Hey Leute,


    Beim Registrieren muss
    der Spieler sein Geburtsdatum angeben, das wird auch gespeichert und in
    den Stats angezeigt. Jetzt will ich das dass was er angegeben hat als richtiges Alter gespeichert wird also einzeln in den Stats ect.. Also mein Geburtsdatum wäre 18.11.1994 = 17
    Jahre. Die 17 Jahre müsten dann einzeln gespeichert werden



    [E]Überarbeitet

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

    Einmal editiert, zuletzt von Eddy ()

  • Mit GetDate() arbeiten, Differenz der Jahre ausrechnen, prüfen ob er in diesem Jahr schon Geburtstag hatte und wenn ja auf die Differenz noch ein Jahr raufrechnen (oder alternativ wenn nicht: Eins subtrahieren, musst du ausprobieren was richtig ist) und fertig. ;)

  • Das Problem ist, ich bin Anfänger ^^ kann mir vllt jemand eine kleine Vorlage machen.

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Also:


    Zieh mal die Jahre voneinander ab. Dann hast du schonmal eine erste Zahl.


    Dann überprüfe ob der Monat und der Tag des heutigen Datums größer oder kleiner als die vom angegebenen Datum sind. Falls ja ziehe von der Differenz der beiden Jahre 1 ab


    //ED:



    new datumdifferenz = heutedatum-geburtsdatum;


    if(heutedatummonat < geburtsdatummonat && heutedatumtag < geburtsdatumtag) {
    datumdifferenz - 1
    return 1;
    }



    Kostenlose Pawno Alternative / PAWN IDE -> PawnStar
    Mass Effect
    :love:

  • stock GetAlter(tag, monat, jahr) // Kann auch falsch sein
    {
    new tY, tM, tD;
    getdate(tY, tM, tD);
    new Alter = tY - jahr;
    if(monat <= tM && tag < tD) --Alter;
    return Alter;
    }


    stock GetAlter(tag, monat, jahr) // Kann auch falsch sein
    {
    new tY, tM, tD;
    getdate(tY, tM, tD);
    return (monat <= tM && tag < tD) ? ((tY - jahr)- 1) : (tY - jahr);
    }


    stock GetAlter(tag, monat, jahr) // Kann auch falsch sein
    {
    new tY, tM, tD; getdate(tY, tM, tD);
    return (monat <= tM && tag < tD) ? ((tY - jahr)- 1) : (tY - jahr);
    }

  • Also ich Arbeite mit PVar´s. Also wenn ich jetzt bei meinen stock Register usw. das mit dem Alter mache, wie Frage ich das dann damit ab, weil ich das dann in meinen Stats befehl packen kann.

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • getdate(&year,&month,&day) // Für Datum


    Das Hilft mir aber nicht weiter, ich muss das alter ja Abspeichern können. Bei meinem stock SpielerSpeichern. Und damit ich das alter beim Registrieren abfragen kannm brauch ich schon mehr Infos.

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • (aktuelles jahr) - (jahr aus usereingabe) = grobes alter, in jahren halt


    oder willst du's auf den tag genau?

  • Also du hast bei dem Register System so drinne, dass das Geburtsdatum der User geseichert wird. Jetzt willst du das wenn die Spieler zbs. 18.11.1994 eingeben, das Alter des Spielers gepseichert wird, und du das in deine Stats packen kannst?? Habe ich das richtig Verstanden

  • @PupsKuchen


    Ja auf den Tag genau.


    Saphire


    Ja, also habe es bei meinen stock Register und so schon als "Alter" gespeichert. Nur jetzt muss ich wissen, wie ich das beim Registrieren wenn der spieler das Datum zbs. 18.11.1994 = 17 Jahre, das Automatisch auf das Alter des Spieler gesetzt wird.

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward


  • Geht leider alles nicht ganz. Ich habe es mal getestet.
    new a1 = GetAlter1(07,03,1997);
    new a2 = GetAlter2(07,03,1997);
    new a3 = GetAlter3(07,03,1997);
    printf("a1 = %d - a2 = %d - a3 = %d", a1, a2, a3);


    Ergebnis:

    Code
    a1 = 14 - a2 = 14 - a3 = 14


    Das ist mein Geburtsdatum, und ich bin aber 15. ;)


    PS: Ich suche ebenfalls so eine Funktion. ;)

  • Ich glaube, meine Frage hat niemand so richtig Verstanden. Beim Regist. muss der Spieler sein Geburtsdatum angeben, das wird auch gespeichert und in den Stats angezeigt. Jetzt will ich das dass was er angegeben hat als Alter gespeichert wird. Also mein Geburtsdatum wäre 18.11.1994 = 17 Jahre. Die 17 Jahre müsten dann einzeln gespeichert werden

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • //ungetestet

    public GetAlter(aDay,aMonth,aYear);
    {
    new year,month,day;
    getdate(year,month,day);
    new alter = year - aYear;
    if(aMonth > month) && (day > aDay))
    {
    alter -= 1;
    }
    return alter;
    }


    //fix
    public GetAlter(aDay,aMonth,aYear);
    {
    new year,month,day;
    getdate(year,month,day);
    new alter = year - aYear;
    if(aMonth > month)
    {
    alter -= 1;
    }
    if(aMonth == month) && (day >= aDay))
    {
    alter -= 1;
    }
    return alter;
    }


    Edit: fix

    Einmal editiert, zuletzt von Tommyx3 ()

  • @Tommy


    Wie mache ich das jetzt, das wenn sich jemand Registriert und sein Geburtsdatum eingegeben, das es das dann in den Alter umstellt, und auch wenn ich /stats mache das Alter dort angezeigt wird. :?: :?:

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Sollte mit split() klappen..

    new alter[30],row[3][5];
    format(alter, 30, "07.03.1997");
    split(alter, row, '.');
    new day = strval(row[0]);
    new month = strval(row[1]);
    new year = strval(row[2]);


    Split funktion:

    forward split(const strsrc[], strdest[][], delimiter)
    public split(const strsrc[], strdest[][], delimiter)
    {
    new i, li;
    new aNum;
    new len;
    while(i <= strlen(strsrc)){
    if(strsrc[i]==delimiter || i==strlen(strsrc)){
    len = strmid(strdest[aNum], strsrc, li, i, 128);
    strdest[aNum][len] = 0;
    li = i+1;
    aNum++;
    }
    i++;
    }
    return 1;
    }

  • So als erstes, bekomme den Error bei der Splitfunktion (456) : error 001: expected token: ";", but found "public"
    Und als zweites, wie Arbeite ich jetzt genau damit? wo muss ich den kleinen Pawn Code von dem Split einfügen.


    (edit)


    Habe bei sa-mp wiki gesehen das mann es mit einem stock machen muss also so.


    stock split(const strsrc[], strdest[][], delimiter)
    {
    new i, li;
    new aNum;
    new len;
    while(i <= strlen(strsrc))
    {
    if(strsrc[i] == delimiter || i == strlen(strsrc))
    {
    len = strmid(strdest[aNum], strsrc, li, i, 128);
    strdest[aNum][len] = 0;
    li = i+1;
    aNum++;
    }
    i++;
    }
    return 1;
    }

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

    Einmal editiert, zuletzt von Eddy ()