2015-12-20 94 views
1

我正在保存php的登錄時間。這是我用它來保存值對每次登錄PHP:設置日期的時區

$update= mysqli_query($connection, "UPDATE employees set loggedin= now() WHERE email = '$email'");  

當我從

$logintime_query= mysqli_fetc h_assoc($logintime); 
    $loggedin_time_converted= explode(" ",$logintime_query) ;  

    $converted_time= $loggedin_time_converted['0']; 
    $converted_date= $loggedin_time_converted['1']; 

獲取值我現在已經比較這個日期與今天的日期,讓我用這今天的日期

$today= $_SERVER['REQUEST_TIME']; 
echo(date("Y-m-d",$today)); 

現在的問題是,$_SERVER['REQUEST_TIME]是給我這個日期

2015-12-21 

,當我進入現在使用日期()和檢索它從DB這是我得到

2015-12-20 

是時區的問題還是什麼?我的時區爲UTC + 4(迪拜),所以我試圖將其設置這樣

date_default_timezone_set('Asia/Dubai'); 

但這不起作用有人請幫我算出這個

+1

數據庫和php代碼在同一臺服務器上?請確保它 –

+0

對不起,但你聲稱使用的PHP代碼不會工作。你可以檢查一下嗎,'mysqli_fetch_assoc()'返回一個數組,並且你試圖像它是一個字符串一樣爆炸它。另外,當你爆炸日期時間字段如'2015-12-20 10:11:12'時,日期將出現在'[0]'和出現的時間'[1]' – RiggsFolly

回答

0

我建議你使用time()功能只要。見here

如果在使用之前設置了date_default_timezone_set('Asia/Dubai');time()它應該工作。

未經測試。

0

它應該是一個時區問題,是的。什麼是您的MySQL服務器的時區?

您可以在全球範圍內的的mysqld mysqld的部分與

default_time_zone='+04:00' 

改變它。

或者與下面的SQL語句:

SET @@global.time_zone='+04:00'; 

另外要注意,$ _ SERVER ['REQUEST_TIME]是Web服務器開始處理您的請求的時間。使用php的date()函數應該更準確。

1

時區複雜而混亂。例如,在這裏,您的問題不僅涉及PHP時區設置,還涉及您的MySQL時區,因爲您在那裏存儲時間戳並嘗試在PHP中再次使用它們。

輸入的Unix時間戳運輸

的更好,更有效的方式來運送周圍所有這些時間戳,這樣你就不必擔心時區轉換,當你從MySQL到PHP或PHP到MySQL或PHP以Javascript或JavaScript轉換爲PHP,就是在需要運輸的時候隨處使用Unix時間戳。

$logintime = mysqli_query("SELECT UNIX_TIMESTAMP(loggedin) as loggedin FROM employees WHERE email = '[email protected]'"); 

現在,當你想比較這個在PHP中,你只需做...

if ($logintime['loggedin'] > time()) { 
    /* ... do stuff ... */ 
} 

從PHP回到MySQL也很簡單...

$t = time(); 
$logintime = mysqli_query("UPDATE employees SET loggedin = FROM_UNIXTIMESTAMP($t) WHERE email = '[email protected]'"); 

這是這樣就方便多不必擔心你是否已經正確設置時區並希望你在未來的某個地方沒有犯過一個簡單的錯誤,這會讓你的結果混亂。