2013-07-11 29 views
0

我想用小於10分鐘前的日期時間來計數行,但當前時間與其相比似乎是1小時前,所以Imm得到0結果,如果我進入我的桌子,並把一些領域前進一小時,然後我得到結果。比較日期時間是提前1小時

獲得的結果:

$stmt = $db->query('SELECT check_log FROM members WHERE check_log >= DATE_SUB(NOW(), INTERVAL 10 MINUTE)'); 
$row_count = $stmt->rowCount(); 
echo $row_count.' Members online.'; 

的輸入這個領域的日期時間爲2013年7月11日16點54分12秒,我沒有得到的結果,但如果我手動更改日期時間2013年7月11日17點54分12秒我得到的日期時間被輸入秒前使用1個結果:

$date = date("Y-m-d H:i:s"); 

的17點54分12秒是我的本地時間16點54分12秒似乎是我的服務器時間,是我的比較試圖展望未來還是利用我的當地時間作爲參考?

+0

你的php和mysql的時間是不同的。你在PHP中設置時區嗎? –

+0

你的'check_log'列的數據類型是什麼? – eggyal

+0

使用一個時間戳(一個int,表示秒以來的秒數),無論您在哪個時區,它都將保持不變。將此與UTC/GMT時間戳進行比較。如果您想在某個時間點將其顯示爲本地時間,請將其轉換爲本地時區,但在所有其他情況下,只需使用UTC/GMT時間即可。 – Sumurai8

回答

2

PHP和MySQL不同意當前時區。

將所需的時間作爲文字從PHP傳遞到SQL,而不是使用NOW()

+0

我不會推薦這種方法,除非它是查詢datetime/timestamp列的唯一地方。如果他忘記將所有查詢重寫爲使用PHP date(),並且如果他更正了mysql和php的時區設置,他就會更加安全(只是我的看法),邏輯可能會變得瘋狂。 –

+0

@fliespl解決方案是對所有活動使用* same * datetime源。 MySQL或PHP。在這種情況下,他使用MySQL並且對結果不滿意。如果他使用PHP,那麼我想他可以找出他錯在哪裏。 – tylerl

+0

@fliespl但是,你也應該正確和一致地設置你的時區。 – tylerl

0

始終在php的時區中存儲日期時間。

你可以特別使用的一個功能是strtotime

$now = strtotime("now"); // current timestamp 
$hour_later = strtotime("+1 hour"); // hour later 
$now = date("Y-m-d H:i:s", $now); 
$hour_later = date("Y-m-d H:i:s", $hour_later);