我对PHP比较陌生,我已经学习了程序化PHP,而且我正在玩一个应用程序。
我查看了网站,发现了几个关于日期格式化和使用PHP,HTML和CSS突出显示的示例。
借助此处提供的帮助和PHP手册,我已经汇总了一些代码,以突出显示由遵循此标准的数据库提供的许多其他行中的2个不同行:
以下是我放在一起的代码
//Today + 1 day
$oneDay = date('m/d/Y', strtotime("+1 day"));
//Today + 3 days
$threeDays = date('m/d/Y', strtotime("+3 days"));
//Database entry for comparison
$due = date_create($record['projected_delivery']);
$dueOneDay = date_create($oneDay);
$dueThreeDays = date_create($threeDays);
//Get the difference between the 2 dates
$diffOne = date_diff($due, $dueOneDay);
$diffThree = date_diff($due, $dueThreeDays);
if ($diffThree->format('%d') < 3) {
$highlight_css = " warning";
}elseif ($diffOne->format('%d') <= 1){
$highlight_css = " danger";
}else {
$highlight_css = "";
}
然后我将$highlight_css
添加到HTML。
到目前为止,部分的功能正在发挥作用。未添加适当的突出显示:
如何实现此功能?
答案 0 :(得分:0)
$diffThree->format('%d')
将返回一个字符串而不是一个整数。为了将其与其他数字(在您的情况下为3和1)正确比较,您需要将其转换为int:
(int) $diffThree->format('%d')
和
(int) $diffOne->format('%d')
答案 1 :(得分:0)
我会改用它:
<?php
$dueDates =["06/05/2017","06/06/2017","06/07/2017","06/08/2017","06/09/2017","06/10/2017","06/11/2017","06/12/2017"];
$table = "<table class='table table-bordered'><thead><tr><th>Date</th></tr></thead><tbody>";
$today = date_create(date('m/d/Y')); // example: 06/07/2017
foreach ($dueDates as $dueStr) {
$due = date_create($dueStr);
$diff = date_diff($today, $due)->format("%r%a");
$highlight_css = "";
if ($diff > 1 && $diff <= 3) {
$highlight_css = " warning";
} elseif ($diff == 1) {
$highlight_css = " danger";
}
$table .= "<tr class='$highlight_css'><td>$dueStr</td></tr>";
}
$table .= "</tbody></table>";
?>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" >
<?php
echo $table;
答案 2 :(得分:0)
DateInterval(date_diff()的返回值)具有天数(实际存储在属性d
中,可以使用而不是获取{{3}的字符串}}),应始终为正数。对于今天日期之前的日期,第一个日期差异(即$diffOne
)将为2天以上,第二个日期差异(即$diffThreeDays
)将为4+(请参阅format()并进行调试表格上方的输出)根据给定的逻辑,今天的日期前几天永远不会与“警告”或“危险”相关联。
比较日期的一种方法(可能更简单)是使用this playground example
注意:
从PHP 5.2.2开始,可以使用DateTime comparison比较DateTime对象。 comparison operators
因此比较DateTime变量(即$due
与$dueOneDay
和$dueThreeDays
)而不是日期差异。
在下面的逻辑中,您会注意到比较的顺序已被颠倒,因此在检查三天差异之前检查一天差异,以避免危险情况永远不会发生。
if ($due < $dueOneDay){
$highlight_css = " danger";
}else if ($due <= $dueThreeDays) {
$highlight_css = " warning";
}else {
$highlight_css = "";
}
使用这种方法,不需要date_diff变量(即$diffOne
,$diffThree
)。
请参阅1中的演示。
1 <子> this playground example 子>