[英]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;">✔</td>';
}
else{
echo '<td class="green_tick">✔</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;">✔</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>';
也許不值得獲得詩歌獎,但對我來說行之有效。 盡管這是我得出的答案,但公平地說,它是從其他答案中得出的。
使用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類,然后應用該類。 如果使用合理緊湊的類名,則很可能會導致頁面尺寸變小。
您應該計算從現在到任務開始的天數。
$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");
首先定義天/顏色的數組,然后像這樣遍歷它:
$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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.