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查询在结果中显示错误的日期时间的主要内容,如果未能解决你的问题,请参考以下文章

MySQL查询日期在结果中加入汉字“年”“月”“日”

不同的Mysql日期结果在网站和PHPmyadmin中

将mysql查询结果转换为不同的日期格式[重复]

如何使用 PHP 将日期显示为 iso 8601 格式

在 PHP MySQL 搜索中未找到结果时显示消息

PHP:检测重复列结果的结束(日历日)