php或mysql时间戳关闭了7个小时

时间:2012-09-13 13:31:05

标签: php mysql timestamp

我目前正在使用某个共享托管,当我在php sql查询中使用NOW()CURRENT_TIMESTAMP时,插入的数据落后了7个小时。

我可以用PHP做些什么来纠正这个问题吗?

我试过了

date_default_timezone_set('Europe/Dublin');

但它似乎没有什么区别。

输出:

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" 
}

3 个答案:

答案 0 :(得分:2)

MySQL时区与PHP时区不同。

以下是MySQL Time Zone Reference,告诉您如何设置它。

懒惰:

mysql> SET time_zone = timezone;

答案 1 :(得分:1)

使用mysql函数时,它将使用MySQL中设置的时区。您可以在查询中使用此更改时区:

SET time_zone = 'Europe/Dublin'

答案 2 :(得分:1)

- 不是答案,但评论太长了 - 请尝试(使用正确的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

请将您计算机上的输出添加到原始问题中......