ilch Forum » Ilch Clan 1.1 » Module und Modifikationen » MEDALLIEN Module

Geschlossen
  1. #1
    User Pic
    Excalibu Mitglied
    Registriert seit
    16.03.2007
    Beiträge
    114
    Beitragswertungen
    0 Beitragspunkte
    Hiho ich bins mal wieder mitm neuen Proplem und zwar moechte ich fuer das Punktemodule eine andere Andere angabe seht hier:

    ##Medallie
    function getmedal($nr,$value){
    if($nr==1){
    	$ej=date('Y',$value);
    	$aj=date('Y', time());
    	$stufe3=$aj-1;
    	$stufe2=$aj-1/12;
    	if($ej<$stufe3){
    	$toreturn='<img src="include/images/medals/1s3.gif" alt="Stufe 3" border="0">';
    	}
    	elseif ($ej<$stufe2){
    	$toreturn='<img src="include/images/medals/1s2.gif" alt="Stufe 2" border="0">';
    	}
    	else   {
    	$toreturn='<img src="include/images/medals/1s1.gif" alt="Stufe 1" border="0">';
        }


    Momentan ist es in Jahre angegeben ich moechte es aber in Monaten:

    Ab 12 Monaten (1 Jahr; anzeige von 1s3.gif)
    Ab 1 Monat (anzeige von 1s2.gif)
    Unter 1 Monat (anzeige von 1s1.gif)


    Habe es bereits probiert das Y was ich dachte fuer Year steht durch M oder mon zu ersetzen, was aber nicht geklappt hat. des weiteren habe ich stufe 2 bereits in Bruch und dezimal zahl probiert anzugeben scheinte aber nicht zu klappen! Wie kann man die angaben Monat umaendern oder was koennte ich sonst machen?


    verwendete ilchClan Version: 1.1

    betroffene Homepage: externer Link
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    m oder n für Monat
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Excalibu Mitglied
    Registriert seit
    16.03.2007
    Beiträge
    114
    Beitragswertungen
    0 Beitragspunkte
    mh geht irgendwie noch nicht jetzt hat jeder die Grafik 1s3.gif wie z.b.: externer Link wo nur 1s2.gif haben sollte!

    Habe ich vielleicht etwas falsch uebrlegt oder gerechnet mit dem groesser gleiner?:

    ##Medallie
    function getmedal($nr,$value){
    if($nr==1){
    	$ej=date('n',$value);
    	$aj=date('n', time());
    	$stufe3=$aj-12;
    	$stufe2=$aj-1;
    	$stufe1=$aj-0;
    	if($ej>$stufe3){
    	$toreturn='<img src="include/images/medals/1s3.gif" alt="Stufe 3" border="0">';
    	}
    	elseif ($ej>$stufe2){
    	$toreturn='<img src="include/images/medals/1s2.gif" alt="Stufe 2" border="0">';
    	}
    	elseif ($ej>$stufe1){
    	$toreturn='<img src="include/images/medals/1s1.gif" alt="Stufe 1" border="0">';
        }
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Also erstmal ist Januar 1 und Dezember 12, wenn also 1-12 dann -11 ist, musst du das auch berücksichtigen, weiter brauchst du das letzte elseif nicht, ist ja im Quellscript auch nicht.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Excalibu Mitglied
    Registriert seit
    16.03.2007
    Beiträge
    114
    Beitragswertungen
    0 Beitragspunkte
    mh was hat das denn damit zu tun ich moechte doch nach 12 monaten und nicht im 12. monat

    geht aber trotzdem noch nicht:

    ##Medallie
    function getmedal($nr,$value){
    if($nr==1){
    	$ej=date('m',$value);
    	$aj=date('m', time());
    	$stufe3=$aj-11;
    	$stufe2=$aj-1;
    	if($ej>$stufe3){
    	$toreturn='<img src="include/images/medals/1s3.gif" alt="Stufe 3" border="0">';
    	}
    	elseif ($ej>$stufe2){
    	$toreturn='<img src="include/images/medals/1s2.gif" alt="Stufe 2" border="0">';
    	}
    	else    {
    	$toreturn='<img src="include/images/medals/1s1.gif" alt="Stufe 1" border="0">';
        }
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Jetzt denke doch mal logisch darüber nach, es registriert sich jemand im November also Monat 11, nun wird im Februar, Monat 2, des Folgejahres deine Abfrage ausgeführt also wird gerechnet 2 - 11 und das ist dann -9.
    Überlege einfach mal ein bisschen und gib nicht gleich auf zwinker


    Zuletzt modifiziert von Mairu am 17.04.2007 - 09:45:42
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Rock@wulf Hall Of Fame
    Registriert seit
    03.06.2004
    Beiträge
    3.282
    Beitragswertungen
    239 Beitragspunkte
    die time fuktion ist eh müll

    habe mitlerweile viel dazu gelernt, was das angeht, leider habe ich aber das script noch nicht fertig ...


    am besten ist es die ganze funktion neu zu schreiben...

    wenn ich zu hause bin werd ich mal nach ner aktualisierung sehen zunge
    Meine Postings repräsentieren meine Meinung wenn nicht anders gekennzeichnet.
    MFG Rock@wulf
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    boehserdavid Mitglied
    Registriert seit
    26.08.2006
    Beiträge
    2.122
    Beitragswertungen
    2 Beitragspunkte
    Hey, Excalibu!

    Um dir mal auch etwas auf die Sprünge zu helfen!

    Geregt am 1.11.2006
    Abfrage am 1.05.2007
    Macht 5-11 = -6 // -6 Monate dabei, eigentlich aber 6
    Mach einfach
    if ( $aj < $ej) { $aj = $aj+12;}


    Das bring dich dann aber auch net weiter, WEIL
    Geregt am 1.11.2006
    Abfrage am 2.12.2007
    Macht 12-11 = 1 // Ein Monat dabei, sind aber 13

    Deswegen der geniale Tipp, beide Werte ( time(), und das Regdatum des Users ( in der DB)) sind UNIX-TimpStamp!

    Mit böhsen Grüßen
    BöhserDavid


    Zuletzt modifiziert von boehserdavid am 17.04.2007 - 16:22:43
    -Heute schon böhse gewesen?- Ab zur Community
    -No Support via Contact-
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Rock@wulf Hall Of Fame
    Registriert seit
    03.06.2004
    Beiträge
    3.282
    Beitragswertungen
    239 Beitragspunkte
    genau das meine ich...

    generier einfach das aktuelle timestamp

    frag ab ob aktuell date - regdate <>= sekundenwert für 1 Monat usw
    Meine Postings repräsentieren meine Meinung wenn nicht anders gekennzeichnet.
    MFG Rock@wulf
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    Excalibu Mitglied
    Registriert seit
    16.03.2007
    Beiträge
    114
    Beitragswertungen
    0 Beitragspunkte
    EDIT: Rock@wulf war kurz schneller^^ shcrieb aber unabhaengig von ihm

    @Mairu entshculdige habe es erst seit grad kapiert^^ soweit bin ich einfahc noch nicht in PhP um da druch zu Blicken!

    Allerdings hat mich dein post aus der Fassung gebracht das heisst es ist ja gar nicht moeglich es zu machen, weil es Monatsabhaengig ist!

    @boehserdavid

    jop genau das hat mir das dann gezeigt^^


    UNIX-TimeStamp leider kenne ich mich damit wie shcon oben geschrieben noch zu wenig aus, koenntest du mir vielelicht helfen wie ich ihn in diesem Sinne mir zu nuetze mache?


    Zuletzt modifiziert von Excalibu am 17.04.2007 - 17:14:48
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Rock@wulf Hall Of Fame
    Registriert seit
    03.06.2004
    Beiträge
    3.282
    Beitragswertungen
    239 Beitragspunkte
    hm am besten einfach mal nach den time funktionen suchen das ist recht leicht und besser als date

    wusste ich aber als ich das modul geschrieben habe noch net zunge
    Meine Postings repräsentieren meine Meinung wenn nicht anders gekennzeichnet.
    MFG Rock@wulf
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    boehserdavid Mitglied
    Registriert seit
    26.08.2006
    Beiträge
    2.122
    Beitragswertungen
    2 Beitragspunkte
    OK, soweit so gut!
    Aber was ist mit
    Geregt 30.11.2006
    Abfrage am 01.12.2006
    macht 12-11 = 1 // 1 Monat dabei, obwohl erst 1 Tag

    @ Rock, schonmal daran gedacht, das Jeder Monat unterschiedlich viele Tage hat, d.h. du kannst nicht + SEKUNDEN FÜR 1 MONAT rechnen!

    Um das zu realisieren, was du dir vorstellst, musst du das ganz anders anfangen!
    Lösung:
    $regjahr = date("Y", $value); // Jahr der Reg (2006)
    $regmon = date("n", $value); // Monat der Reg (03)
    $regtag = date("j", $value); // Tag der Reg (05)
    $monplus = mktime(0,0,0,$regmon+1,$regtag,$regjahr);
    $jahrplus = mktime(0,0,0,$regmon,$regtag,$regjahr+1);
    if ( $jahrplus < time()) { BILD 3}
    elseif ( $monplus < time()) { BILD 2}
    else { BILD 1}


    Somit wäre dann gewährleistet das erst am 30.12.2006 1 Monat rum ist!
    Was jetzt natürlich nicht richtig funzt ist, das
    Geregt am 31.10.2006
    1 Monat dabei erst am 1.12.2006!
    Aber um das zu fixen bedarf es dann ein wenig mehr Arbeit!
    zunge

    *EDIT: Und wie Rock schon geschrieben hat ist seine Berechnung für den Aufstieg MÜLL, sorry Rock, aber du weiß das ja selber! zwinker


    Zuletzt modifiziert von boehserdavid am 18.04.2007 - 07:42:26
    -Heute schon böhse gewesen?- Ab zur Community
    -No Support via Contact-
    0 Mitglieder finden den Beitrag gut.
  13. #13
    User Pic
    Rock@wulf Hall Of Fame
    Registriert seit
    03.06.2004
    Beiträge
    3.282
    Beitragswertungen
    239 Beitragspunkte
    danke danke

    stammt halt aus früheren tagen...

    time()
    Gibt die seit Beginn der Unix-Epoche (Januar 1 1970 00:00:00 GMT) bis jetzt vergangenen Sekunden zurück.

    dem entsprechend hat 1 Tag x Sekunden

    so nun hat ein Monat 30 /31 tage

    if(Reg Monat 1 or 3 usw){
    plus 31 tage
    } elseif (Reg Monat gleich 2){
    plus 28 tage (fall 29 tage lass ich mal außen vor kann man hier vernachlässigen denke ich da es um ne medallie geht :P)
    }else{
    plus 30}

    eben so kann man das machen das was du unten aufgeschrieben hast macht spätestens bei der berechnung Mon 12 + 1 schlapp denn mon 13 gibbet es net :-)

    muss man sich halt hoch rechnen

    der vergleich ist dann
    Wenn regdate + Sekunden wert (monat tag oder jahr egal)
    >= time() ist dann bekommt er die medallie so funktioniert das alles andere ist käse zunge

    oder noch professioneller xD

    Deine Lösung ist : Käse, genau so bescheiden wie meine alte berechnung xD

    Wo bei man die neue auch mit verkürzten schleifen und etlichem andern sachen optimieren kann
    genau so könnte man noch ne prüfung ein bauen was passiert wenn ich im Februar rechne
    mktime(01.02.regjahr) + zeitwert von 29 Tagen dann date(n, ergebniswert) wenn dann ergebnis date =03 bzw 3
    dann ist regdate + 28 ansonsten +29

    wenn man das mit einbaut kann man beim Jahr auch ermitteln ob #365 oder 366 xD
    muss man halt mit ausprobieren die Zeit werte gehen ganz einfach xd

    1 min= +60
    1 h = +3600
    1 Tag= +86400
    dann halt * 30 für 30 tage

    so kann man immer genau bestimmen wies ist

    Rock, schonmal daran gedacht, das Jeder Monat unterschiedlich viele Tage hat, d.h. du kannst nicht + SEKUNDEN FÜR 1 MONAT rechnen!

    ...xD doch man kann

    Edit:
    Aso syr das ich das jezt nicht fertig geproggt habe allso mit allen orginal befehlen aber bin aufm sprung zunge
    Dem entsprechen dürften auch fehler drin sein aber das prinzip sollte klar werden


    Zuletzt modifiziert von Rock@wulf am 18.04.2007 - 18:05:51
    Meine Postings repräsentieren meine Meinung wenn nicht anders gekennzeichnet.
    MFG Rock@wulf
    0 Mitglieder finden den Beitrag gut.
  14. #14
    User Pic
    boehserdavid Mitglied
    Registriert seit
    26.08.2006
    Beiträge
    2.122
    Beitragswertungen
    2 Beitragspunkte
    ZitatZitat geschrieben von Rockwulf

    eben so kann man das machen das was du unten aufgeschrieben hast macht spätestens bei der berechnung Mon 12 + 1 schlapp denn mon 13 gibbet es net :-)


    Leider hast du da etwas Unrecht! Weil wenn bei mktime() eine Zahl entsteht, die es so nicht geben kann, wie MONAT 13 wird der Monat auf 1 gesetzt und das Jahr ein hoch gezählt, also von 2006 auf 2007! Ist dann genauso wie mit Stunde 25, wird dann Stunde 1 und aus Tag 5 wird Tag 6, usw. , deswegen funzt das trotzdem, ist zwar net so Pro, wie ich das gerne hätte aber, soviel Zeit hatte ich net, um das zu coden!

    Und um heraus zu finden, ob der Februar 29 Tage hat, macht man einfach date("L",time()), bei wiedergabe 1 hat Feb 29, bei 0 hat Feb 28!

    Deswegen ist das doch die einfachste Variante, wenn man das mit dem Feb und den 30 Tagen Monaten beachtet!
    $regjahr = date("Y", $value); // Jahr der Reg (2006)
    $regmon = date("n", $value); // Monat der Reg (03)
    $regtag = date("j", $value); // Tag der Reg (05)
    $regmont = date("L",$value); // Schaltjahr
    if ( $regmon == '1' AND $regtag >= '29'){ // EDIT
     if ( $regmont == '1')
     { $regtags = '29';}
     else{ $regtags = '28';}
    }
    elseif ( $regtag == '31' AND $regmon != '12' AND $regmon != '7' ) // EDIT
    { $regtags =  '30';}
    else{ $regtags = $regtag; }
    $monplus = mktime(0,0,0,$regmon+1,$regtags,$regjahr);
    $jahrplus = mktime(0,0,0,$regmon,$regtag,$regjahr+1);
    if ( $jahrplus < time()) { BILD 3}
    elseif ( $monplus < time()) { BILD 2}
    else { BILD 1}


    Ich denke mal das ist es jetzt, inklusive Schaltjahr und Beachtung, das wenn man sich am 31. regt, das dann vom folge Monat der 30. genommen wird!


    Zuletzt modifiziert von boehserdavid am 18.04.2007 - 19:19:50
    -Heute schon böhse gewesen?- Ab zur Community
    -No Support via Contact-
    0 Mitglieder finden den Beitrag gut.
  15. #15
    User Pic
    Rock@wulf Hall Of Fame
    Registriert seit
    03.06.2004
    Beiträge
    3.282
    Beitragswertungen
    239 Beitragspunkte
    hm jo

    ich habs machs halt in sekunden ist zwar nen bissl rechenzeit
    aber ich spaar mir dien umweg sie erst in nen datum zu rechnen die dann +1 und dann wieder in sekunden zu rechnen

    egal hast recht geht beides

    PS: Das L bei date ist mir wieder neu zunge
    Meine Postings repräsentieren meine Meinung wenn nicht anders gekennzeichnet.
    MFG Rock@wulf
    0 Mitglieder finden den Beitrag gut.
  16. #16
    User Pic
    Excalibu Mitglied
    Registriert seit
    16.03.2007
    Beiträge
    114
    Beitragswertungen
    0 Beitragspunkte
    hiho n1 thx klappt spitze,
    dass in sekunden zu rechnen waere halt ne riesige Zahl^^
    0 Mitglieder finden den Beitrag gut.
  17. #17
    User Pic
    Gericom Mitglied
    Registriert seit
    25.11.2010
    Beiträge
    13
    Beitragswertungen
    0 Beitragspunkte
    wo und wie muss ich das machen damit es bei mir auch geht weil bei meiner seite bekommen alle nach dem jahreswechsel ne medalie und das scheint die lösung dafür zu sein
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Module und Modifikationen

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten