2016-08-06 8 views
0

Ich versuche, eine Task-Tracking-Web-Anwendung zu erstellen, die eine Tabelle der aktuellen Aufgaben und deren Reihenfolge zeigt Fortschritt. Aufgaben werden in einer MySQL-Datenbank protokolliert. Von einigen anderen Fragen hier habe ich so weit gekommen, soweit wie „YYYY-MM-TT“ auf „yyyy-mm-dd“ mit dem folgenden Code vergleichen:PHP Vergleichen Sie "YYYY-MM-DD" mit Aufgabe Dringlichkeit Farbe Option (gelb/orange/rot ... Tabellenzelle)

$today = strtotime(date("Y-m-d")); // "2016-08-06" 
$startDate = $row['start_date']; // "2016-08-04" from the database 

if ($row['started'] == 1) { // database tinyINT is either "1" or "0" 
    if(strtotime($today) < strtotime($startDate)){ 
     echo '<td class="green_tick" style="background-color:yellow;">&#10004;</td>'; 
    } 
    else{ 
     echo '<td class="green_tick">&#10004;</td>'; 
    } 
} else echo '<td></td>'; 

Ich möchte in der Lage sein zu geben, visuelle Anzeige einer überfälligen Aufgabe (nach Tabellenzellen-Hintergrundfarbe) im Vergleich zum heutigen Datum.

Wenn also eine Aufgabe als gestartet markiert ist ($ row ['started'] == 1), zeigt die Tabellenzelle nur einen grünen Haken an (& # 10004).

Wenn eine gestartete Aufgabe 2 Tage alt ist, lautet die Tabellenzelle mit dem grünen Häkchen style = "background-color: yellow" (zeigt an, dass ich mir vielleicht diese Aufgabe ansehen sollte).

Wenn eine gestartete Aufgabe 4 Tage alt ist, lautet die Tabellenzelle mit dem grünen Häkchen style = "background-color: orange" (was bedeutet, dass ich mich wirklich mit dieser Aufgabe befassen sollte).

Wenn eine gestartete Aufgabe 6 Tage alt ist, lautet die Tabellenzelle mit dem grünen Häkchen style = "background-color: red" (was bedeutet, dass ich mich ernsthaft mit dieser Aufgabe beschäftigen sollte, bevor die Dinge außer Kontrolle geraten).

Die Frage ist also, wie kann ich mehrere Datumsvergleiche für: $ heute, $ heute - 2 Tage, $ heute - 4 Tage und $ heute - 6 Tage?

Danke für alle Antworten, sie waren alle hilfreich. Ich endete mit dem folgenden:

$today = strtotime(date("Y-m-d")); 
$startDate = strtotime($row['start_date']); 
$diff = $today - $startDate; 

if ($row['started'] == 1) { 
    if ($diff >= 172800 && $diff < 345600) { 
     echo '<td class="green_tick" style="background-color:yellow;">&#10004;</td>'; 
    } 
    elseif ($diff >= 345600 && $diff < 518400) { 
     echo '<td class="green_tick" style="background-color:orange;">&#10004;</td>'; 
    } 
    elseif ($diff >= 518400) { 
     echo '<td class="green_tick" style="background-color:red;">&#10004;</td>'; 
    } 
    else{ 
     echo '<td class="green_tick">&#10004;</td>'; 
    } 
} else echo '<td></td>'; 

Vielleicht nicht würdig eines Poesie Award, aber es funktioniert OK für mich. Obwohl dies die Antwort ist, zu der ich kam, um fair zu sein, wurde sie von Ideen aus den anderen Antworten abgeleitet.

+0

kann ich fügen Sie hinzu, dass es sich lohnen könnte, das Symbol ebenfalls zu ändern - dies wird farbblinden Menschen helfen, die Unterschiede zu sehen. Etwas zu beachten? –

+1

Darf ich Ryan als behinderten Mann seit 16 Jahren hinzufügen? Die Welt hört nicht auf und wartet auf Menschen mit Behinderungen. Der Grund, warum ich der schnellste einhändige Schreibkraft auf dem Gesicht des Planeten wurde, ist, weil ich das vor einigen Jahren begriffen habe. – MikeA

Antwort

0

Sie sollten die Anzahl der Tage zwischen jetzt und dem Datum berechnen, an dem die Aufgabe gestartet wurde.

$today = strtotime(date("Y-m-d")); // "2016-08-06" 
$startDate = strtotime($row['start_date']); // "2016-08-04" from the database 

if ($row['started'] == 1) { // database tinyINT is either "1" or "0" 
    $daysPassed = floor(($today-$startDate)/(60*60*24)); 
    $color = ''; 

    if ($daysPassed >= 6) 
     $color = 'red'; 
    elseif ($daysPassed >= 4) 
     $color = 'orange'; 
    elseif ($daysPassed >= 2) 
     $color = 'yellow'; 

    if ($color) 
     echo '<td class="green_tick" style="background-color:' . $color . ''';">&#10004;</td>'; 
    else 
     echo '<td class="green_tick">&#10004;</td>'; 
} else 
    echo '<td></td>'; 

Sie können auch die Anzahl der Tage berechnen, wie folgend:

$today = new DateTime(); // "2016-08-06" 
$startDate = new DateTime($row['start_date']); // "2016-08-04" from the database 

$daysPassed = $startDate->diff($today)->format("%a"); 
0

ein PHP-Switch verwenden, hier ist ein Link zu der Dokumentation: http://php.net/manual/en/control-structures.switch.php

Beispielcode:

$today = new DateTime(); 
$startDate = new DateTime($row['start_date']); 
$elapsed = $startDate->diff($today)->format("%a"); 

if ($row['started'] == 1) { 
    echo '<td class="green_tick"'; 
    switch ($elapsed) { 
     case 2: 
      echo ' style="background-color:yellow;"'; 
      break; 
     case 4: 
      echo 'style="background-color:orange;"'; 
      break; 
     case 6: 
      echo 'style="background-color:red;"'; 
      break; 
     default: 
      echo ''; 
    } 
    echo '>&#10004;</td>' 
} else echo '<td></td>'; 

Eine Sache scheint mir seltsam darüber, nämlich scheint es mir, dass Sie diese wünschen würde Zustände auf die Bereiche zwischen den angegebenen Werten als auch in dem Fall anwenden würden Sie folgendes verwenden möchten:

$today = new DateTime(); 
$startDate = new DateTime($row['start_date']); 
$elapsed = $startDate->diff($today)->format("%a"); 

if ($row['started'] == 1) { 
    echo '<td class="green_tick"'; 
    switch ($elapsed) { 
     case ($elapsed <= 3 && $elapsed > 1): 
      echo 'style="background-color:yellow;"'; 
      break; 
     case $elapsed <= 5: 
      echo 'style="background-color:orange;"'; 
      break; 
     case $elapsed >= 6: 
      echo 'style="background-color:red;"'; 
      break; 
    } 
    echo '>&#10004;</td>' 
} else echo '<td></td>'; 

ich würde auch empf beende das, anstatt das style-Tag auf jedes Element anzuwenden, solltest du vielleicht eine CSS-Klasse für jede Farbe erstellen und stattdessen diese Klasse anwenden. Es würde höchstwahrscheinlich zu kleineren Seitengrößen führen, wenn Sie einen relativ kompakten Klassennamen verwenden.

0

erste Array von Tagen/Farben definieren, und dann durchlaufen sie wie folgt aus:

$today = strtotime(date("Y-m-d")); 
    $startDate = strtotime("2016-08-04"); 
    $daysDiff = round(($today-$startDate)/86400); 
    $colors = array(2=>'yellow', 4=>'orange', 6=>'red'); 
    $output = '<td></td>';//assign default value in case no condition is met 
    if ($row['started'] == 1){ 
     $output = '<td class="green_tick">&#10004;</td>'; 
     foreach($colors as $days=>$color){ 
      if($daysDiff <= $days){ 
       $output = "<td class='green_tick' style='background-color:$color;'>&#10004;</td>"; 
       break;//if the condition is met, you break the loop 
      } 
     } 
    } 
    echo $output;