2012-09-13 33 views
1

我目前在一些共享主機,當我在我的php sql查詢中使用NOW()CURRENT_TIMESTAMP插入的數據是7小時後。PHP或MySQL的時間戳關閉7小時

有什麼我可以做的PHP在糾正這一點?

我已經試過

date_default_timezone_set('Europe/Dublin'); 

,但它似乎並沒有發揮作用。

OUTPUT:

php time: 1347544854 
date: 2012-09-13 14:0054 UTC 
mysql array(3) { 
["zone"]=> string(6) "SYSTEM" 
["utcts"]=> string(19) "2012-09-13 14:00:54" 
["now"]=> string(19) "2012-09-13 07:00:54" 
} 
+2

爲什麼不插入php的'time()'而不是MySQL的'NOW()'。然後'date_default_timezone_set('Europe/Dublin');'(這是一個PHP設置)也會更有意義。 – Havelock

+0

在php或mysql中的時間是錯誤的嗎? – PeeHaa

回答

1

在使用MySQL的函數,它要使用的時區設置在MySQL。您可以在您的查詢中使用此更改時區:

SET time_zone = 'Europe/Dublin' 
+0

試過這個:$ sql =「SET time_zone ='Europe/Dublin'」; $ stmt = $ this-> query($ sql);什麼都沒有發生,做錯了? –

+0

確保您在每次查詢您要檢查時間之前都這樣做。在恢復到服務器默認設置之前,它只會持續到腳本執行的時間。 – aynber

2

MySQL時區與PHP時區不同。

這是MySQL Time Zone Reference,向您展示如何設置它。

對於懶:

mysql> SET time_zone = timezone; 
1

- 不是一個答案,但太長了comment-
請嘗試(與MySQL連接正確的憑據)

<?php 
echo "php\n"; 
echo 'time: ', time(), "\n"; 
echo 'date: ', date('Y-m-d H:is T', time()), "\n"; 

echo "mysql\n"; 
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly'); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
foreach($pdo->query('SELECT @@time_zone as zone, UTC_TIMESTAMP() as utcts, Now() as now', PDO::FETCH_ASSOC) as $row) { 
    foreach($row as $k=>$v) { 
     echo $k, '=', $v, "\n"; 
    } 
} 

輸出應該像

php 
time: 1347543592 
date: 2012-09-13 15:3952 CEST 
mysql 
zone=SYSTEM 
utcts=2012-09-13 13:39:53 
now=2012-09-13 15:39:53 

請加上ou在您的機器上輸入您的原始問題...

+0

服務器的時區設置爲utc-7,就像「Amercia/Denver」一樣。而你的mysql服務器被配置爲使用服務器的時區。另一方面,「歐洲/都柏林」(當前)是utc + 1。這是你自己的「個人」服務器嗎? – VolkerK

+0

nope,共享託管服務器 –

+0

任何進一步的幫助@VolkerK –