2013-11-01 45 views
0

我一直試圖用if語句比較兩個日期,然後運行另一個查詢並更新mysql數據庫,但未成功。我不知道我要去哪裏錯。如果我使用procedural和使用試圖比較兩個日期...一個從MySQL DB存儲爲DATE和一個使用DateTime對象

date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $date30))); 

然後我得到列boosterWithinDays每一場更新。

如果我嘗試使用DateTime對象

$boosterDate = new DateTime($row['boosterDate']); 
$boosterDate->format("Y-m-d"); 

然後我沒有得到任何更新的。我已經設置了一些超過30天的BoosterDates,其中一些更少,沒有任何工作。

下面是完整的代碼:

<?php 
//date_default_timezone_set('America/Chicago'); 
$todaysDate = new DateTime('now'); 
$formattedDate = $todaysDate->format('Y-m-d'); 
$date = new DateTime ('now'); 
$date90 = $date->add(new DateInterval('P90D')); 
$date90 = $date->format('Y-m-d'); 
$date = new DateTime ('now'); 
$date60 = $date->add(new DateInterval('P60D')); 
$date60 = $date->format('Y-m-d'); 
$date = new DateTime ('now'); 
$date30 = $date->add(new DateInterval('P30D')); 
$date30 = $date->format('Y-m-d'); 
//echo $date90; 
//echo "<br />"; 
//echo $formattedDate; 

$sql = "SELECT * FROM service;"; 

if(!$result = $con->query($sql)){ 
die('There was an error running the query [' . $con->error . ']'); 
} 
while($row = $result->fetch_array()){ 
//Get all the rows and store them in an array 
$firstQueryRows[] = $row; 
} 
foreach($firstQueryRows as $row){ 
//do a new query with $row 
$patientID = $row['patientID']; 
$serviceID = $row['serviceID']; 
//$boosterDate = date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $row['boosterDate']))); 
//$date30 = date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $date30))); 
//$date60 = date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $date60))); 
//$date90 = date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $date90))); 
$boosterDate = new DateTime($row['boosterDate']); 
//$boosterDate->format("Y-m-d"); 
//$interval = $boosterDate->diff($date30); 
$boosterDate = $boosterDate->format("Y-m-d"); 
var_dump($boosterDate > $date30); 
echo "<br /><br />"; 
print "This is the booster date" . " " . ($boosterDate) . " "; 
echo "<br /><br />"; 
print "This is todays date plus 30 days" . " " . ($date30) . " "; 
if($boosterDate < $date30){ 
//echo "The date is less than 30" . " " . $row['serviceID'] . "<br /><br />"; 
//echo $date30 . "<br /><br />"; 
//echo $boosterDate; 
echo "this is being shown because boosterDate object is less than date30 object"; 
$sql = "UPDATE service SET boosterWithinDays = 30;"; 
if(!$result = $con->query($sql)){ 
die('There was an error running the query [' . $con->error . ']'); 
} 
}else{ 
NULL; 
} 
} 
//$date = $row['boosterDate']; 
//$id = $row['patientID']; 
//echo $date . " " . $id . "<br /><br />"; 
//echo date_default_timezone_get(); 

?> 
+1

您對'電話 - >格式()'是不必要的 –

+0

如果我走了 - >格式,它只是將所有的字段30,所以我還是堅持,爲什麼當我比較兩個日期不正確。 – ndjustin20

回答

0

這可能是我,但因爲你是比較2個對象(日期時間),是不是更好地使用diff功能,並獲得反標誌?

if ($boosterDate->diff($date30)->invert) { 
    // other code  
} 
+0

從php.net網站http://ca3.php.net/m...tetime.diff.php你可以做到這一點。 $ date1 = new DateTime($ date); $ date2 = new DateTime($ date); 然後從這一點開始,您可以使用比較運算符來處理兩個變種,如<, >或==。由於某些原因,這不適用於我的代碼。無論真假,我的領域助推器今天alwasy更新至30.我不知道爲什麼查詢運行時,它是假的。任何幫助深表感謝。 我已經更新了上面的代碼以反映來自php手冊的更改。 – ndjustin20