我正在尝试创建一个任务跟踪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;">✔</td>';
}
else{
echo '<td class="green_tick">✔</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;">✔</td>';
}
elseif ($diff >= 345600 && $diff < 518400) {
echo '<td class="green_tick" style="background-color:orange;">✔</td>';
}
elseif ($diff >= 518400) {
echo '<td class="green_tick" style="background-color:red;">✔</td>';
}
else{
echo '<td class="green_tick">✔</td>';
}
} else echo '<td></td>';
也许不值得诗歌奖,但它对我来说还可以。虽然这是我得出的答案,但公平地说,它来自其他答案的想法。
答案 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 '>✔</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 '>✔</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 . ''';">✔</td>';
else
echo '<td class="green_tick">✔</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">✔</td>';
foreach($colors as $days=>$color){
if($daysDiff <= $days){
$output = "<td class='green_tick' style='background-color:$color;'>✔</td>";
break;//if the condition is met, you break the loop
}
}
}
echo $output;