date_default_timezone_set(“Europe / London”)未返回正确的时间

时间:2016-04-16 10:58:10

标签: php datetime pdo

当我使用下面的代码设置我的默认时区并将其插入数据库时​​,时间不正确。

在测试时,时间是11:56,但数据库设置为06:56, 5小时后

<?php
date_default_timezone_set('Europe/London');
$stmt = $con->prepare("INSERT INTO test (datetime) VALUES (CURRENT_TIMESTAMP)");
$stmt->execute();
?>

2 个答案:

答案 0 :(得分:1)

如果MySQL有关于时区设置的信息(通常有):

SET time_zone = 'Europe/London'

如果没有关于时区的信息,但是在服务器中,您可以使用服务器上的命令行在MySQL中加载表,但那是服务器管理:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p

如果无法安装时区表,您可以使用php以+hh:mm格式获取默认时区偏移量,并在MySQL中将其用作time_zone。当然,在调用date_default_timezone_set('<timezone_name>')

之后,必须这样做
$datetime = new DateTime();
$datetime_offset = $datetime->format("P");
$query = "SET time_zone = '$datetime_offset'";

答案 1 :(得分:1)

你可以在php中获得时间

<?php
date_default_timezone_set('Europe/London');
$time_stamp = date('Y-m-d H:i:s');
$stmt = $con->prepare("INSERT INTO test (datetime) VALUES ('".$time_stamp."')");
$stmt->execute();
?>