[英]Strange behaviour in a while loop with a date compare in PHP
嗨,我正在嘗試創建一個簡單的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天,那么它應該變成紅色塊,否則它什么都不做。
任何幫助都會很棒。
謝謝
發生的是,由於對象是在php 5+中通過引用分配的,因此所有$ compare變量都是對同一原始$ date對象的引用。 因此,您要反復修改同一個,而不是創建4個單獨的同一個。 參見http://www.php.net/manual/zh/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/zh/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
STRING傳遞給DateTime系統,例如
$date = new DateTime($query_row['DueDate']);
然后,您可以開始將其用作對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.