1

MySQL我从这样的数据库中填充日期列表:

<?php
    while ($row = mysql_fetch_array($list_customers)) {
        echo "<tr>\n";
            echo "<td>".$row['customer_date']."</td>\n";
        echo "</tr>\n";
    }
?>

现在我想将结果添加到根据某些标准<span>更改的 a 中:class=''

  • 如果日期结果在今天日期的 30 天内,请添加 class='yellow'
  • 如果日期结果从今天起超过 30 天,请添加class='green'
  • 如果日期结果已过,则根据今天的日期,添加class='red'

这可能吗?提前致谢。

4

2 回答 2

3

是的。只需使用一系列if语句将您的日期与当前时间进行比较,然后为类名分配一个变量,如下所示:

while ($row = mysql_fetch_query($list_customers)) {
    echo "<tr>\n";
    $class = "class='green'";
    if (strtotime($row['customer_date']) < time()) {
        $class = "class='red'";
    }elseif (strtotime($row['customer_date']) < time() + 30*24*3600) {
        $class = "class='yellow'";
    }
    echo "<td><span $class>" . $row['customer_date'] . "</span></td>\n";
    echo "</tr>\n";
}        
于 2012-07-12T20:25:42.843 回答
2

这实际上只是编写if()您指定的条件的简单案例。它没有魔法。

首先,我们需要知道您的customer_date字段采用什么格式。由于您将其直接打印到 HTML 代码中,我猜它是文本格式,所以我们需要做的第一件事是将其转换为日期对象。

$custDate = new DateTime($row['customer_date']);

这仅在日期采用合适的格式时才有效,但老实说,如果它不是标准的 MySQL 日期格式,那么您现在应该停止并在我们继续之前修复它。

您还需要当前日期作为日期对象:

$currDate = new DateTime();

现在您可以使用 DateTime 类上的方法轻松地比较它们:

$dateDiff = $currDate->diff($custDate)->days;

现在你已经有了,你可以做你的if()条件。

不过,我要注意几点:

  1. 你正在使用mysql_fetch_array(). 请注意,这些mysql_功能被认为是过时的;您应该尽可能替换为mysqli_xxx或 PDO 库。

  2. 你建议把类放到a<span>里面<td>——也可以直接把类放到<td>. 这将是一个更清洁的选择,因此我将在答案中使用它,尽管这取决于您。

  3. 您建议使用类名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;
}

希望有帮助。

于 2012-07-12T20:46:40.167 回答