2014-01-07 85 views
0

我已經寫了一些代碼來檢查2天是否已經過去,使用2個日期,但似乎沒有工作。添加2天並比較

<?php 
date_default_timezone_set('Europe/Amsterdam'); 

$_connection = mysqli_connect("localhost", "root", "root", "theater") or die("Error: " . mysqli_error()); 

$query = "SELECT * FROM Reservering"; 
$result = mysqli_query($_connection, $query); 

while($row = mysqli_fetch_assoc($result)) { 
    $res = strtotime($row['ReserveringsDatum']); 
    echo date('d-m-y', $res); 
} 

mysqli_close($_connection); 
?> 

$ row ['ReserveringsDatum']是一個看起來像這樣的日期:「07-01-14」(示例)。

由於某種原因,echo date('d-m-y', $res);顯示我「14-01-07」,這只是一天和一年被顛倒。

編輯: 對於那些想知道它是如何結束的,這裏是工作代碼:

<?php 
date_default_timezone_set('Europe/Amsterdam'); 

$_connection = mysqli_connect("localhost", "root", "root", "theater") or die("Error: " . mysqli_error()); 

$query = "SELECT *, DATEDIFF(NOW(), DATE(ReserveringsDatum)) 'age' FROM Reservering WHERE DATEDIFF(NOW(), ReserveringsDatum) > 2 "; 
$result = mysqli_query($_connection, $query); 

while($row = mysqli_fetch_assoc($result)) { 
    if($row['Betaalt'] == 'nee') { 
     $query2 = "DELETE FROM Reservering WHERE `ReserveringID` = '".$row['ReserveringID']."'"; 
     mysqli_query($_connection, $query2); 
    } 
} 

mysqli_close($_connection); 


?> 
+0

哪個值已獲得$ res和$ limit?你做了一個var_dump嗎? – Goikiu

+1

'$ limit'總是會超過'$ res' - 它被定義爲'$ res + 172800'。你確定你不確定是否在**真實**日期/時間之前超過2天嗎? – George

+0

你爲什麼不把邏輯放在你的sql語句中?只需獲取通過'截止日期'的記錄。 – Roger

回答

0

正如在評論中所說,我會在SQL中進行選擇。不需要選擇所有行並使用PHP進行篩選。它更好地在SQL中完成。

簡單的例子:

SELECT *, DATEDIFF(NOW(), ReserveringsDatum) 'age' FROM Reservering WHERE DATEDIFF(NOW(), ReserveringsDatum) > 2 

確保reserveringsdatum是一個日期,如果一個TIMESTAMP你需要將其轉換爲DATE。

SELECT *, DATEDIFF(NOW(), DATE(ReserveringsDatum)) 'age' FROM Reservering WHERE DATEDIFF(NOW(), ReserveringsDatum) > 2 
+0

我把它設置爲VARCHAR。當我將其更改爲日期或時間戳時,它分別給我「2007-01-14」和「2007-01-14 00:00:00」。我不確定爲什麼它會在07年閱讀。 – user1433479

+0

我已將字段更改爲DATE,並將信息發佈到數據庫的方式使其顯示爲「2014-01-07」。使用這個查詢,它是否只返回超過2天的行? – user1433479

+0

我測試過了,我認爲它正在工作。我做了7行,從1到7(2014-01-1到2014-01-07),只有從1到4出現:D。 – user1433479

0

試試這個

$res = strtotime($row['ReserveringsID']); 
$limit = strtotime($row['ReserveringsID']) + strtotime("+2 day", $res); 
var_dump($res); var_dump($limit); 
if($limit > $res) { 
    echo "2 days have passed"; 
} else { 
    echo "2 days have not yet passed"; 
} 
+1

那有什麼不同? – George

+0

他比較錯誤的方式 – sas

0

我認爲你需要修復你的條件。

如果要檢查$ res是否超過兩天,則必須將限制與當前時間進行比較,而不是$ res。

$res = strtotime($row['ReserveringsID']); 
$limit = strtotime('+2 days', $res); 

if($limit < time()) { 
    echo "2 days have passed"; 
} else { 
    echo "2 days have not yet passed"; 
} 
0

您的問題是在這條線

$limit = strtotime($row['ReserveringsID']) + $2days; 

您需要添加比如增加2天的日期 https://eval.in/86632

的這一個

$res = strtotime($row['ReserveringsID']); 
$limit = strtotime('+2 days', $res); 

工作演示2天

How do I add 24 hours to a unix timestamp in php?

Adding days to a timestamp

+0

當我用你的方法添加2天它給我16-01-14(而不是預期的09-1-14)。甚至更奇怪的是,它說,2天過去了,即使當前日期不遠16-01-14 – user1433479

+0

@ user1433479如何? https://eval.in/86632 – chanchal118

+0

我不知道。當我從數據庫中獲得價值時,它說這是14-01-07,就好像是在轉年一天,而是增加2年。 – user1433479