2016-12-07 2 views
0

zu setzen Ich arbeite mit einem Ereigniskalender in PHP. Der Kalender selbst funktioniert einwandfrei, aber ich versuche, einzelne Einträge im Kalender basierend auf den Start-/Endzeiten der Ereignisse farblich zu codieren. Ich habe if/elseif-Logik, die nur mit Startzeit funktioniert, aber mein Versuch, Anfang und Endzeiten zu verwenden, hat zu Fremde geführt. HierVersuchen, eine Variable basierend auf mehreren Bedingungen if-elseif in PHP

ist die Funktion:

function get_bg_color ($event_start) { 

    // set colors for shifts 
    // 0 = grave 
    // 1 = days 
    // 2 = swing 
    // 3 = weekend 
    // 4 = day-swing 
    // 5 = grave-day 
    // 6 = swing-grave 

    // $hr = date('H', $event_start); 
    $hr = date('H:i', $event_start); 
    $hour1 = str_replace(':', '', $hr); 
    $hr2 = date('H:i', $event_end); 
    $hour2 = str_replace(':', '', $hr2); 
    $day = date('L', $event_start); 
    if ($day == "sunday" || $day == "saturday") {$color="3";} 
#  elseif ($hour1 > 0 && $hour1 < 730) {$color="0";} 
#  elseif ($hour1 >= 730 && $hour1 < 1300) {$color="1";} 
#  elseif ($hour1 >= 1300 && $hour1 < 1530) {$color="4";} 
#  elseif ($hour1 >= 1530 && $hour1 < 2100) {$color="2";} 
#  else {$color="0";} 
    else { 
      if ($hour1 > 0 && $hour1 < 730) { 
        if ($hour2 < 730) {$color="0";} 
        elseif ($hour2 >= 730 && $hour2 < 1300) {$color="5";} 
      } 
      elseif ($hour1 >= 730 && $hour1 < 1300) { 
        if ($hour2 <= 1300) {$color="1";} 
        elseif ($hour2 >= 1300 && $hour2 < 1530) {$color="4";} 
      } 
      elseif ($hour1 >= 1300 && $hour1 < 1530) { 
        if ($hour2 <= 1530) {$color="4";} 
        elseif ($hour2 >= 1530 && $hour2 < 2100) {$color="4";} 
      } 
      elseif ($hour1 >= 1530 && $hour1 < 2100) { 
        if ($hour2 <= 2100) {$color="2";} 
        elseif ($hour2 > 2100) {$color="6";} 
      } 
      else {$color="0";} 
    } 
    return $color; 
} 

Die kommentierten-out elseifs sind die funktionstüchtige Version der Logik, die nur die Startzeit verwendet. Der untere Block von elseifs (meine modifizierte Start/Ende-Logik) beschert mir immer wieder verirrte Wochenendfarben für Ereignisse, die nicht auf ein Wochenende fallen.

Farben sind in einem separaten style.css definiert. Die Variablen $event_start und werden aus einer Datenbank abgerufen. Diese funktionieren alle, wie im kommentierten Block getestet.

+0

Also genau das, was ___Schwierigkeit___ siehst du? – RiggsFolly

+0

'date ('L', $ event_start);' gibt eine Zahl zurück, die nicht aus einem Tag besteht! 'date ('l', $ event_start);' gibt einen Tagnamen zurück, der Ihren Code ___Strangessigkeit___ verursachen würde – RiggsFolly

+0

Gute Arbeit, Detective Folly. – Farkie

Antwort

0

Ich glaube, ich habe gefangen all die Fremdheit

function get_bg_color ($event_start, $event_end) { 
// --------- Missing Parameter ---^^^^^^^^^^ 
// needs this parameter on function call as well 

    $hour1 = date('Hi', $event_start); 
    // use the format required, save an instruction 
    //$hour1 = str_replace(':', '', $hr); 

    $hour2 = date('Hi', $event_end); 

    // will NOT return a day name, will return 0,1,2,3,4,5,6 
    //$day = date('L', $event_start); 

    // will return a day name but need converting to lower case 
    // so it matches your IF tests which are in lower case 
    $day = strtolower(date('l', $event_start)); 

    // always a good idea to init returned values 
    $color = "0"; 


    if ($day == "sunday" || $day == "saturday") 
    { 
     $color="3"; 
    } else { 
      if ($hour1 > 0 && $hour1 < 730) { 
       if ($hour2 < 730) {$color="0";} 
       elseif ($hour2 >= 730 && $hour2 < 1300) {$color="5";} 
      } 
      elseif ($hour1 >= 730 && $hour1 < 1300) { 
       if ($hour2 <= 1300) {$color="1";} 
       elseif ($hour2 >= 1300 && $hour2 < 1530) {$color="4";} 
      } 
      elseif ($hour1 >= 1300 && $hour1 < 1530) { 
       if ($hour2 <= 1530) {$color="4";} 
       elseif ($hour2 >= 1530 && $hour2 < 2100) {$color="4";} 
      } 
      elseif ($hour1 >= 1530 && $hour1 < 2100) { 
       if ($hour2 <= 2100) {$color="2";} 
       elseif ($hour2 > 2100) {$color="6";} 
      } 
      else {$color="0";} 
    } 
    return $color; 
} 

Sie nicht zu überprüfen vergessen, dass der Aufruf dieser Funktion 2 relevanten Parameter hat nun auch

+0

Vielen Dank, RiggsFolly. Ich werde diese Änderungen vornehmen und hier mit meinem Ergebnis kommentieren. – japp1egate

+0

RiggsFolly: Ich habe Ihre vorgeschlagenen Änderungen an dieser Funktion vorgenommen, aber ich sehe immer noch die gleiche falsche Ausgabe. Plus, wenn ich $ event_end der Funktion get_bg_color hinzufüge, bekomme ich "Warnung: Fehlendes Argument 2 für get_bg_color()" – japp1egate

+0

Siehe das gelbe Bit am Ende meiner Antwort.Wenn Sie es nicht sehen, aktualisieren Sie die Seite – RiggsFolly

Verwandte Themen