这实际上只是编写if()
您指定的条件的简单案例。它没有魔法。
首先,我们需要知道您的customer_date
字段采用什么格式。由于您将其直接打印到 HTML 代码中,我猜它是文本格式,所以我们需要做的第一件事是将其转换为日期对象。
$custDate = new DateTime($row['customer_date']);
这仅在日期采用合适的格式时才有效,但老实说,如果它不是标准的 MySQL 日期格式,那么您现在应该停止并在我们继续之前修复它。
您还需要当前日期作为日期对象:
$currDate = new DateTime();
现在您可以使用 DateTime 类上的方法轻松地比较它们:
$dateDiff = $currDate->diff($custDate)->days;
现在你已经有了,你可以做你的if()
条件。
不过,我要注意几点:
你正在使用mysql_fetch_array()
. 请注意,这些mysql_
功能被认为是过时的;您应该尽可能替换为mysqli_xxx
或 PDO 库。
你建议把类放到a<span>
里面<td>
——也可以直接把类放到<td>
. 这将是一个更清洁的选择,因此我将在答案中使用它,尽管这取决于您。
您建议使用类名red
, green
, yellow
. 请注意,这不是对类名的特别好的使用。类名应该反映元素的实际用途,而不是它的外观。这是因为使用类并将样式与 HTML 分开的全部意义在于,可以更改样式而无需更改 HTML。但是,如果类名只是颜色名,它会在逻辑上将其与该颜色联系起来;您也可以将颜色直接放入 HTML 中。类名的更好选择可能是custExpired
,custNearlyExpired
等。这会给您以后更大的灵活性,并使任何阅读它的人都更容易理解代码(例如 google bot!)。
因此,考虑到所有这些,这里有一些代码给你:
$currDate = new DateTime();
while ($row = $mysqli->fetch_array($list_customers)) {
$custDate = new DateTime($row['customer_date']);
$dateDiff = $currDate->diff($custDate)->days;
$class = '';
if($dateDiff < 30) { $class = 'custNearlyExpired'; }
if($dateDiff < 0) { $class = 'custExpired'; }
echo "<td class='custDate {$class}>{$row['customer_date']}</td>\n";
}
和 CSS:
td.custDate {
background: green;
}
td.custDate.custNearlyExpired {
background: yellow;
}
td.custDate.custExpired {
background: red;
}
希望有帮助。