簡體   English   中英

PHP將“ YYYY-MM-DD”與任務緊急顏色選項(黃色/橙色/紅色…表格單元)進行比較

[英]PHP Compare “YYYY-MM-DD” with task urgency colour option (yellow/orange/red… table cell)

我正在嘗試創建一個任務跟蹤Web應用程序,該應用程序顯示當前任務及其進度的表格。 任務記錄在MySQL數據庫中。 從這里的其他一些問題來看,到目前為止,我如何使用以下代碼將“ YYYY-mm-dd”與“ YYYY-mm-dd”進行比較:

$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>';

我希望能夠以可視化的方式指示與今天的日期相比,該任務已過期(按表格單元格背景色)。

因此,如果將任務標記為已開始($ row ['started'] == 1),則表格單元格只會顯示一個綠色的勾號(&#10004)。

如果開始的任務為2天,則帶有綠色勾號的表格單元格為style =“ background-color:yellow”(表明也許我應該看看這個任務)。

如果開始的任務為4天,則帶有綠色對勾的表格單元格為style =“ background-color:orange”(表明我應該真正開始研究此任務)。

如果已開始的任務為6天,則帶有綠色勾號的表格單元格為style =“ background-color:red”(表示在事情失控之前我應該​​認真看一下此任務)。

所以問題是,我該如何對以下各項進行多個日期比較:$ today,$ today-2天,$ today-4天和$ today-6天?

感謝您提供所有答案,他們都很有幫助。 我最終進行以下操作:

$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>';

也許不值得獲得詩歌獎,但對我來說行之有效。 盡管這是我得出的答案,但公平地說,它是從其他答案中得出的。

使用PHP Switch,這是文檔的鏈接: http : //php.net/manual/en/control-structures.switch.php

示例代碼:

$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>';

令我感到奇怪的是,在我看來,您希望這些狀態也適用於指定值之間的范圍,在這種情況下,您想使用以下內容:

$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>';

我還建議不要將樣式標簽應用於每個元素,而應考慮為每種顏色創建一個css類,然后應用該類。 如果使用合理緊湊的類名,則很可能會導致頁面尺寸變小。

您應該計算從現在到任務開始的天數。

$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>';

您還可以按以下方式計算天數:

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

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

首先定義天/顏色的數組,然后像這樣遍歷它:

    $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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM