这真是你写指定的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库进行更换。
你建议在<td>
里面放入<span>
这个类 - 可以直接把类放入<td>
。这将是一个更清洁的选择,所以我会在答案中使用它,尽管这取决于你。
您建议使用类名称red
,,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;
}
希望有所帮助。
'customer_date'字段的类型是什么? – Adi 2012-07-12 20:20:00
请不要在新代码中使用'mysql_ *'函数。他们不再被维护,社区已经开始[弃用流程](http://goo.gl/KJveJ)。请参阅[**红框**](http://goo.gl/GPmFd)?相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定,[本文](http://goo.gl/3gqF9)将有助于选择。如果你关心学习,[这里是很好的PDO教程](http://goo.gl/vFWnC)。 – 2012-07-12 20:26:40
@大卫:我知道你已经接受了一个答案,但也请阅读我的答案。我已经提出了几点你可能需要知道的。 – Spudley 2012-07-12 20:47:49