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

  • [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
    PHP-Code:
    require_once("func_leo.php");
    if(
    leo()!= 0){echo "Noch ".leo()." Tage !";}
    else{echo 
    "Hallo Leo ! && Vatti = 3*";} 

  • #2
    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
    PHP-Code:
    require_once("func_leo.php");
    if(
    leo()!= 0){echo "Noch ".leo()." Tage !";}
    else{echo 
    "Hallo Leo ! && Vatti = 3*";} 

    Kommentar


    • #3
      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.
      "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

      Kommentar


      • #4
        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
        PHP-Code:
        require_once("func_leo.php");
        if(
        leo()!= 0){echo "Noch ".leo()." Tage !";}
        else{echo 
        "Hallo Leo ! && Vatti = 3*";} 

        Kommentar


        • #5
          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
          PHP-Code:
          require_once("func_leo.php");
          if(
          leo()!= 0){echo "Noch ".leo()." Tage !";}
          else{echo 
          "Hallo Leo ! && Vatti = 3*";} 

          Kommentar


          • #6
            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.
            "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

            Kommentar


            • #7
              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
              PHP-Code:
              require_once("func_leo.php");
              if(
              leo()!= 0){echo "Noch ".leo()." Tage !";}
              else{echo 
              "Hallo Leo ! && Vatti = 3*";} 

              Kommentar


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

                Kommentar


                • #9
                  Hallo,

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

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

                  Vielen Dank

                  Grüße

                  Micha
                  PHP-Code:
                  require_once("func_leo.php");
                  if(
                  leo()!= 0){echo "Noch ".leo()." Tage !";}
                  else{echo 
                  "Hallo Leo ! && Vatti = 3*";} 

                  Kommentar


                  • #10
                    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
                    PHP-Code:
                    require_once("func_leo.php");
                    if(
                    leo()!= 0){echo "Noch ".leo()." Tage !";}
                    else{echo 
                    "Hallo Leo ! && Vatti = 3*";} 

                    Kommentar


                    • #11
                      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.
                      "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                      Kommentar


                      • #12
                        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
                        PHP-Code:
                        require_once("func_leo.php");
                        if(
                        leo()!= 0){echo "Noch ".leo()." Tage !";}
                        else{echo 
                        "Hallo Leo ! && Vatti = 3*";} 

                        Kommentar

                        Lädt...
                        X