Hi我正在尝试创建一个简单的while循环,该循环从PHP数据库中提取关联数组。本质上,我想将从数据库中提取的日期与当前日期进行比较。这是陷阱。不同的部分(用表格表示)有不同的截止日期。因此,我需要通过减去某些天数来修改从数据库中提取的日期。我用不同的变量做了这件事,但我得到了一些奇怪的结果,这些结果不是我指定的。我是不是错过了什么?
$today = date("Y-m-d")
while ($query_row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))
{
$date = $query_row['DueDate'];// this is the due date from the server
$duedate = $date->format('d-m-Y'); // to output in table
$compare1 = $date;
$compare2 = $date;
$compare3 = $date;
$compare4 = $date;
$compare1->modify('-4 days');
$compare2->modify('-3 days');
$compare3->modify('-2 days');
$compare4->modify('-1 day');
echo $today.' today <br/>';
//just for debugging
echo $date ->format('Y-m-d').' due date <br/>';
echo $compare1->format('Y-m-d').' minus 4 date <br/>';
if ( $today >= $compare1 )
{
$Triginsert = 'style="background-color: #ff0000;"';
}
else
{
$Triginsert = '';
}
}
正如你所看到的,如果当前日期大于或等于比较日期,该日期应该是从服务器上提取的日期-4天,那么它应该将块变成红色,否则它什么都不做。。
任何帮助都会很棒。
感谢
由于对象是在php5+中通过引用分配的,因此所有$compare变量都是对同一原始$date对象的引用。因此,您正在重复修改同一个,而不是创建4个单独的。看见http://www.php.net/manual/en/language.oop5.references.php。你想要的是:
$compare1 = clone $date;
$compare2 = clone $date;
etc.
顺便问一下,当你var_dump($query_row['DueDate'])时,你会得到什么?我假设它已经是一个日期对象,否则->modify()调用会立即出错,你说你得到的是奇怪的行为,而不是错误消息,但其他一些答案是假设$query_row['DueDate']是一个字符串,所以我想仔细检查。
查询中的数据将只是文本而不是Date对象,您需要使用该数据设置对象以实现您想要的
$date = new DateTime($query_row['DueDate']);
你将要遇到的问题是基于DueDate的形式,所以你可能需要首先处理它。
以下是设置Date对象的说明http://www.php.net/manual/en/datetime.construct.php
您的问题是:
$date = $query_row['DueDate'];// this is the due date from the server
^^^^^^----string
$duedate = $date->format('d-m-Y'); // to output in table
^^^^^---using string as an object
您需要通过构造函数(例如)将$date
字符串传递给DateTime系统
$date = new DateTime($query_row['DueDate']);
然后你就可以开始把它当作一个物体来使用了。