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

时间:2016-08-06 09:51:48

标签: php css date

我正在尝试创建一个任务跟踪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 [&#39;已启动&#39;] == 1),则表格单元格只会显示绿色标记(&amp;#10004)。

如果已启动的任务为2天,则带有绿色勾号的表格单元格为style =&#34; background-color:yellow&#34; (表明我可能应该看看这个任务)。

如果已启动的任务为4天,则带有绿色勾号的表格单元格为style =&#34; background-color:orange&#34; (表明我应该开始考虑这个任务。)

如果已启动的任务为6天,则带有绿色勾号的表格单元格为style =&#34; background-color:red&#34; (表明在事情失控之前我应该​​认真看看这个任务。)

所以问题是,如何进行多个日期比较:$ 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>';

也许不值得诗歌奖,但它对我来说还可以。虽然这是我得出的答案,但公平地说,它来自其他答案的想法。

3 个答案:

答案 0 :(得分:1)

使用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类并应用该类。如果使用相当紧凑的类名,很可能会导致页面尺寸变小。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

首先定义你的天/颜色数组,然后像这样迭代它:

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