Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] if-else und switch

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Micha72
    hat ein Thema erstellt [Erledigt] if-else und switch.

    [Erledigt] if-else und switch

    Hallo,

    heute morgen hatte ich schon mal ein Problem und Cycap und blackscorp konnten mir helfen.

    Nun hänge ich schon wieder

    ich muss eine if-else Anweisung mit einer switch Anweisung koppeln und es gelingt mir nicht.

    Hier der Code:

    PHP-Code:
    if(date('W') % 2)
    {
        switch(
    date("d.m"))
        {

            case  
    "31.03"$band "Quartal 1";break;
            case  
    "30.06"$band "Quartal 2";break;
            case  
    "30.09"$band "Quartal 3";break;
            case  
    "31.12"$band "Quartal 4";break;
            case  
    "31.01"$band "Monat 1";break;
            case  
    "28.01"$band "Monat 2";break;
            case  
    "30.04"$band "Monat 1";break;
            case  
    "31.05"$band "Monat 2";break;
            case  
    "31.07"$band "Monat 1";break;
            case  
    "31.08"$band "Monat 2";break;
            case  
    "31.10"$band "Monat 1";break;
            case  
    "30.11"$band "Monat 2";break;
        }
        
    $band strftime("%A").' 1';
    }else{
      switch(
    date("d.m"))
        {
            case  
    "31.03"$band "Quartal 1";break;
            case  
    "30.06"$band "Quartal 2";break;
            case  
    "30.09"$band "Quartal 3";break;
            case  
    "31.12"$band "Quartal 4";break;
            case  
    "31.01"$band "Monat 1";break;
            case  
    "28.01"$band "Monat 2";break;
            case  
    "30.04"$band "Monat 1";break;
            case  
    "31.05"$band "Monat 2";break;
            case  
    "31.07"$band "Monat 1";break;
            case  
    "31.08"$band "Monat 2";break;
            case  
    "31.10"$band "Monat 1";break;
            case  
    "30.11"$band "Monat 2";break;
        }
        
    $band strftime("%A").' 2';

    Das ganze dient der Dokumentation der täglichen Datensicherung. Abhängig vom Datum werden andere Bänder benötigt.

    Die Reihenfolge der Bänder ist folgendermassen.

    gerade Kalenderwoche = WochentagBand 1 (z.Bsp Montag 1, Dienstag 1 usw,)
    ungerade KW = WochentagBand 2 (z.Bsp. Montag 2, Dienstag 2 usw.)

    am letzten Tag eines Quartals = Quartal 1 bis Quartal 4

    am letzten Tag des Monats (außer Quartal) = Monat 1 bzw. Monat 2 (auch im Wechsel

    Daraus ergibt sich dann:

    31. Januar = Monat 1
    28. Februar = Monat 2
    31. März = Quartal 1
    30. April = Monat 1
    usw.

    Kann mir jemand nen Tip geben, wie ich das am geschicktesten (sodass es auch 2011 und 2012 noch funktioniert) umsetzen kann?

    Vielen Dank schon mal an alle helfenden

    Grüße

    Micha

  • Micha72
    antwortet
    Hallo,

    Mensch -- TOP --- Klappt 100% genauso und ist echt viel kürzer.

    DANKE !!!!

    Das ist halt der Unterschied zwischen PROFI und Anfänger

    Den Operator % hab ich noch nicht verstanden, da muss ich mich nochmal mit auseinander setzen...

    Vielen Dank für die Hilfe

    Grüße

    Micha

    Einen Kommentar schreiben:


  • Dark Guardian
    antwortet
    PHP-Code:
    $month date("m");
    if (
    $month == && date("d") == date("t")) {
        
    $band "Quartal ".($month 3);
    } else if (
    date("d") == date("t")) {
        
    $band "Monat ".($month 3);
    } else if (
    date("w") == && (date("t") == date("d"strtotime("+1 day")) OR date("t") == date("d"strtotime("+2 days")))) { //test auf freitag und wochenende
         
    if ($month == 0) {
            
    $band "Quartal ".($month 3);
         } else {
            
    $band "Monat ".($month 3);
         }
    } else if (
    date('W') % == 0) {
        
    $band strftime("%A").' 2';
    } else {
        
    $band strftime("%A").' 1'

    Sollte das ganze auch tun und ist erheblich kürzer.

    Einen Kommentar schreiben:


  • Micha72
    antwortet
    Hallo,

    nach langem hin und her hab ich nun endlich die Lösung gefunden *freu*.

    Ich habe meine Switch Anweisung in eine if..else Anweisung gepackt und die funktion monletzter() nochmal angepasst.

    meine Lösung sieht nun so aus

    PHP-Code:
    <?php
    function monletzter()
    {
    $anztage date('t');
    $monat date('m');
    $jahr date('Y');
    $wochtag date('w',mktime(0,0,0,$monat,$anztage,$jahr));
    if (
    $wochtag == 6)
    {
        
    $monletzter $anztage -1;
    }
    elseif (
    $wochtag == 0)
    {
        
    $monletzter $anztage -2;
    }
    else
    {
        
    $monletzter $anztage;
    }
        return 
    $monletzter;
    }
    ?>
    <?php
    function band()
    {
        if (
    date('W') %== 0)
        {
            
    $band strftime('%A').' 2';
        }
        else
        {
            
    $band strftime('%A').' 1';
        }
    return 
    $band;
    }
     
    ?>
    <?php
    if (monletzter() == date('d'))
    {
         switch(
    date("d.m.Y"))
        {
            case  
    date('m') == '03':$band "Quartal 1";break;
            case  
    date('m') == '06':$band "Quartal 2";break;
            case  
    date('m') == '09':$band "Quartal 3";break;
            case  
    date('m') == '12':$band "Quartal 4";break;
            case  
    date('m') == '01' or
                  
    date('m') == '04' or
                  
    date('m') == '07' or
                  
    date('m') == '10':$band "Monat 1";break;
            case  
    date('m') == '02' or
                  
    date('m') == '05' or
                  
    date('m') == '08' or
                  
    date('m') == '11':$band "Monat 2";break;
        }
    }
    else
    {
        
    $band band();
    }
    ?>
    und klappt bestens.

    Vielen Dank an alle Helfer

    Grüße

    Micha

    Einen Kommentar schreiben:


  • Micha72
    antwortet
    Hallo,

    wie würde analog dazu die if..elseif aussehen?

    Wäre die nicht erheblich länger und umfangreicher?

    Vielen Dank

    Grüße

    Micha

    Einen Kommentar schreiben:


  • mquadrat
    antwortet
    Ich komm bei deinem Switch nicht so ganz mit. Du verwendetst das eher als umständliche Version von if..elseif.

    Einen Kommentar schreiben:


  • Micha72
    antwortet
    Hallo,

    Danke Dir, habs mittlerweile teilweise gelöst.

    Ich hatte mir gedacht, wenn der Monatsletzte auf einen Samstag oder Sonntag fällt, dann ist der Monatsletzte ja immer der Freitag (außer bei Feiertagen, aber das lasse ich weg).

    Also hab ich die Funktion auch so gestaltet

    PHP-Code:
    <?php
    function monletzter()
    {
    $wochtag date('w',mktime(0,0,0,date('m'),date('t'),date('Y')));
    //wenn der letzte Tag des Monats auf einen Samstag oder Sonntag fällt
    //ist der letzte Tag des Monats immer der Freitag
    if ($wochtag == OR $wochtag == 0)
    {
        
    $monletzter 5;
    }
    else
    {
        
    $monletzter $wochtag;
    }
        return 
    $monletzter;
    }
    ?>
    Mit meiner Switch Abfrage klappt das soweit auch ganz gut

    PHP-Code:
    switch(date("d.m.Y"))
    {
            case  
    monletzter() == date('w') and date('m') == 03:$band "Quartal 1";break;
            case  
    monletzter() == date('w') and date('m') == 06:$band "Quartal 2";break;
            case  
    monletzter() == date('w') and date('m') == 09:$band "Quartal 3";break;
            case  
    monletzter() == date('w') and date('m') == 12:$band "Quartal 4";break;
            case  
    monletzter() == date('w') and date('m') == 01 or
                  
    monletzter() == date('w') and date('m') == 04 or
                  
    monletzter() == date('w') and date('m') == 07 or
                  
    monletzter() == date('w') and date('m') == 10:$band "Monat 1";break;
            case  
    monletzter() == date('w') and date('m') == 02 or
                  
    monletzter() == date('w') and date('m') == 05 or
                  
    monletzter() == date('w') and date('m') == 08 or
                  
    monletzter() == date('w') and date('m') == 11:$band "Monat 2";break;
            case 
    date('W') % == 0:$band strftime("%A").' 2';break;
            default;
    $band strftime("%A").' 1';

    AAAABBBER....

    Genau im Monat August (31.08.2010 = Dienstag) und im Monat September (30.09.2010 = Donnerstag) bringt er mir die falschen Angaben.

    Statt Monat2 für den 31.08.2010 gibt er Dienstag 1 aus.
    Statt Quartal 3 für den 30.09.2010 gibt er Donnerstag 1 aus.

    Alle anderen Monate funktioniert das Einwandfrei, nur diese beiden Monate nicht. (habs jedesmal getestet bei Umstellung der Systemzeit).

    Woran kann das liegen?

    Vielen Dank

    Grüße

    Micha

    Einen Kommentar schreiben:


  • Dark Guardian
    antwortet
    date("w") gibt dir den Tag der Woche zurück und deswegen immer 5, weil 6 (Samstag) - 1 = 5 (Freitag) ergibt.

    Du musst nicht vom Tag der Woche 1 oder 2 abziehen sondern vom Tagesdatum.

    Du weisst das der 31.7 ein Samstag ist, also ist dein "Zieldatum" der 30.7. Wäre der 31.7 ein Sonntag ist dein Zieldatum der 29.7.

    PHP-Code:
    if ($wochtag == 6)
    {
        
    $monletzter $wochtag -1;
    }
    elseif (
    $wochtag == 0)
    {
        
    $monletzter $wochtag -2;
    }
    else
    {
        
    $monletzter $wochtag;
    }
        echo 
    $monletzter;

    Dein Fehler ist also hier. Du musst von $anztage subtrahieren und nicht von $wochtag.

    Einen Kommentar schreiben:


  • Micha72
    antwortet
    Hallo,

    ich nochmal.

    anhand des manuals habe ich mir eine Funktion gebastelt, die auch funktioniert.

    Ich erhalte als Ergebnis, den letzten Wochentag des aktuellen Monats, der KEIN Samstag oder Sonntag ist.

    Soweit so gut, jedoch wenn ich damit weiter hantieren will, erhalte ich IMMER als Ergebnis Donnerstag.

    Hier die Funktion:

    PHP-Code:
    <?php
    function monletzter()
    {
    $anztage date('t');
    $monat date('m');
    $jahr date('Y');
    $wochtag date('w',mktime(0,0,0,$monat,$anztage,$jahr));
    if (
    $wochtag == 6)
    {
        
    $monletzter $wochtag -1;
    }
    elseif (
    $wochtag == 0)
    {
        
    $monletzter $wochtag -2;
    }
    else
    {
        
    $monletzter $wochtag;
    }
        echo 
    $monletzter;
    }
    ?>
    Und hier mal verschiedene Aufrufe der Funktion.

    PHP-Code:
    <?php
    echo monletzter();                  //egibt im aktuellen Monat Juli = 5
    echo "<br />";
    echo 
    strftime('%A',monletzter());   //ergibt im aktuellen Monat Juli = 5Donnerstag (Wochentag deutsch)
    echo "<br />";
    echo 
    date('l'monletzter());       //ergibt im aktuellen Monat Juli = 5Thursday
    ?>
    So ganz scheine ich das noch nicht verstanden zu haben, kann mir wer auf die Sprünge helfen?

    Vielen Dank schon mal.

    Grüße

    Micha

    Einen Kommentar schreiben:


  • Micha72
    antwortet
    Hi,

    Danke für deinen Hinweis.

    Hättest Du vielleicht nur ein kleines Beispiel, anhand ich mich da besser rein denken kann?

    Auf jeden Fall zieh ich mir jetzt erstmal das Manual dazu rein.

    Vielen Dank

    Grüße

    Micha

    Einen Kommentar schreiben:


  • Dark Guardian
    antwortet
    Mit dem Parameter "t" von Date kannst du die Anzahl Tage des Monats ermitteln was zugleich auch dem Monatsletztem entspricht. Den Monat wie gewohnt mit "m", das Jahr mit Y.

    Daraus kannst du mit mktime() einen Timestamp erzeugen den du date() mitgeben kannst um über den Parameter "w" den Wochentag herauszufinden.

    Ist dieser dann 6 oder 0 ist der Monatsletzte entweder Samstag oder Sonntag. Je nachdem musst du von deinem Datum also 1 oder 2 Tage abziehen.

    Anders sieht das aus wenn du für das aktuelle Datum die Rechnung durchführst. Dann prüfst du ob Freitag ist und zusätzlich ob der Tag der Timestamps von +1 Tag oder +2 Tage date("t") entsprechen (siehe strtotime() im Manual.

    Einen Kommentar schreiben:


  • Micha72
    antwortet
    if-else und switch - teilweise gelöst

    Hallo,

    habs selbst raus bekommen:

    PHP-Code:
    switch(date("d.m"))
    {

            case  
    "31.03"$band "Quartal 1";break;
            case  
    "30.06"$band "Quartal 2";break;
            case  
    "30.09"$band "Quartal 3";break;
            case  
    "31.12"$band "Quartal 4";break;
            case  
    "31.01"$band "Monat 1";break;
            case  
    "28.01"$band "Monat 2";break;
            case  
    "30.04"$band "Monat 1";break;
            case  
    "31.05"$band "Monat 2";break;
            case  
    "31.07"$band "Monat 1";break;
            case  
    "31.08"$band "Monat 2";break;
            case  
    "31.10"$band "Monat 1";break;
            case  
    "30.11"$band "Monat 2";break;
            case 
    date('W') % == 0:$band strftime("%A").' 2';break;
            default;
    $band strftime("%A").' 1';

    jetzt fehlt mir zu meinem Glück nur noch, das zwar am letzten eines Monats entweder das Monatsband (1 oder2) oder das Quartalsband (1-4) angezeigt wird, der Monatsletzte aber niemals ein Wochenende sein darf

    Das heist für den Juli, der 31. ist ein Samsag, da muss dann das Monatsband am Freitag angezeigt werden.

    Samstags und Sonntags werden keine Bänder gewechselt, da wird Plattensicherung erstellt.

    Hätte dazu noch jemand nen Tip?

    Vielen Dank

    Grüße

    Einen Kommentar schreiben:

Lädt...
X