PHP MySQL查询在结果中显示错误的日期时间
Posted
技术标签:
【中文标题】PHP MySQL查询在结果中显示错误的日期时间【英文标题】:PHP MySQL query shows wrong datetime in result 【发布时间】:2017-10-08 00:39:57 【问题描述】:我正在使用工作台访问数据库连接。
我的问题是当我在工作台中运行直接查询时,结果是正确的,但是我使用 php 函数运行的相同查询 DateTime 是不同的。 mysql 服务器时区:EST Linux 服务器时区:EST
但结果是 GMT 时区。
所有数据录入记录均显示EST时间。
例如。 Mysql Workbench 结果:日期时间:19:00:00 PHP查询结果:22:00:00
【问题讨论】:
尝试更改php默认时区然后执行查询 我已经这样做了。当我打印本地时间时,它显示正确的时间 请给我 2 个日期时间,一个在 GMT,另一个在 EST(预期输出) 如果 MySQL datetime=10/10/2017 00:00:00(存储在 DB 中)则 PHP 返回 04:00:00。(查询执行后返回) 【参考方案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();
?>
你会在Date Section
中找到Default timezone
从这些信息中,您应该能够看到您的 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>
【讨论】:
是的,我正在使用它作为临时解决方案。但我想知道为什么会这样。我的 PHP 本地时间已经是 EST 格式,我的 SQL 服务器也在存储 EST 时间,那么为什么 PHP 会通过 UTC 时间。 echo date_default_timezone_get() 的输出是什么。''; 美国/纽约 请检查我的新答案 不。仍然面临同样的问题。我必须使用临时时区转换来解决时间问题。以上是关于PHP MySQL查询在结果中显示错误的日期时间的主要内容,如果未能解决你的问题,请参考以下文章