PHP比较"YYYY-MM-DD"具有任务紧急颜色选项(黄色/橙色/红色..表细胞)


PHP Compare "YYYY-MM-DD" with task urgency colour option (yellow/orange/red... table cell)

我正在尝试创建一个任务跟踪web应用程序,显示当前任务及其进度顺序的表。任务记录在MySQL数据库中。从这里的其他一些问题到目前为止,我已经得到了如何用以下代码比较"YYYY-mm-dd"answers"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),则表格单元格只显示一个绿色勾号(✔)。

如果一个开始的任务是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>';

也许配不上诗歌奖,但对我来说还行。虽然这是我得出的答案,但公平地说,它是从其他答案的想法中衍生出来的。

您应该计算从现在到任务开始日期之间的天数。

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

使用PHP开关,这里是文档的链接: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"));
    $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;