PHP MySQL查询在结果中显示错误的日期时间

时间:2017-10-08 00:39:57

标签: php mysql datetime

我正在使用workbench来访问数据库连接。

我的问题是当我在workbench中运行直接查询时结果是正确的但我使用PHP函数运行的查询相同,DateTime是不同的。 MySQL服务器时区:EST Linux服务器时区:EST

但结果出现在GMT时区。

所有数据录入记录都显示EST时间。

例如。 Mysql Workbench结果:datetime:19:00:00 PHP查询结果:22:00:00

1 个答案:

答案 0 :(得分:1)

好吧,您可以将返回的数据转换为其他时区,因此如果您的时间存储在EST中但php显示为GMT,则可以将其转换为

这是一个例子     

// now
$date = date_create('2017-10-09 07:00:00', timezone_open('Asia/Dubai'));

function getDateByTimeZone($date,$TimeZone='US/Eastern'){
    date_timezone_set($date, timezone_open($TimeZone));
    return $date->format('Y-m-d H:i:s');
}
echo getDateByTimeZone($date);
echo "<br />";
echo getDateByTimeZone($date,'GMT');

// Output 

# 2017-10-08 23:00:00
# 2017-10-09 03:00:00

?>

假设$date是您从Mysql返回的数据,在您的情况下是GMT,将其传递给该函数然后您将获得EST。

您还可以通过更改以下

来配置PHP.init文件
date.timezone = "America/New_York"

并确保您的php服务器在正确的时区下运行

<?php
phpinfo();
?>

您会在Default timezone中找到Date Section 根据该信息,您应该能够看到您的php服务器的默认时区。

如果您要为服务器中的单个网站设置默认时区,可以通过添加以下内容来编辑VirtualHost

<IfModule php7_module>
php_admin_value date.timezone "America/New_York"
</IfModule>
<IfModule php5_module>
php_admin_value date.timezone "America/New_York"
</IfModule>

如果您想为每个文件夹设置默认时区,可以通过添加以下内容来编辑 htaccess 文件

<IfModule !fcgid_module>
php_value date.timezone "America/New_York"
</IfModule>