【问题标题】:Set time zone issue设置时区问题
【发布时间】:2017-06-15 18:57:39
【问题描述】:

我想将我网站的时区设置为欧洲/布鲁塞尔。 我制作了一个小的 php 文件:

<?php
$DT = new DateTime($timestamp,new DateTimeZone('UTC'));
$DT->setTimezone(new DateTimeZone('Europe/Brussels'));
$date = $DT->format('Y-m-d H:i:s');
?>

我已将此文件包含在所有其他 php 文件中。 我遇到的问题是我在我的mysql上放了一个时间戳。 与在其他文件中相比,我使用准备好的语句 PDO 调用此时间戳。 但即使我在我使用的每个页面上设置了新的默认时间,日期也没有得到调整。

由于我的提供商的限制,我无法更改 mysql 上的时区,他们建议我使用上述脚本。但这不起作用。

我做错了什么?

【问题讨论】:

  • 请更新您的问题并使用实际时间戳将$timestamp 展平,然后发布您从var_export($date); 获得的信息以及您的期望。
  • “以上脚本”只是一个建议。这只是为 DateTime 类的一个实例设置时区,而不是以任何方式全局设置时区。他们的建议是在您使用日期的任何地方,将该日期实例化为 DateTime 对象,然后设置您选择的时区。这不是您将包含在所有文件中的内容。

标签: php mysql pdo


【解决方案1】:

您可能已经更改了 PHP 中的默认时区,但您也需要为您的 mysql 更改它。 MySQL 中生成的时间戳将基于 MySQL 设置的时区。

以下是如何将 MySQL 时区与 PHP 时区同步的示例:

<?php
$now = new DateTime();
$mins = $now->getOffset() / 60;
$sgn = ($mins < 0 ? -1 : 1);
$mins = abs($mins);
$hrs = floor($mins / 60);
$mins -= $hrs * 60;
$offset = sprintf('%+d:%02d', $hrs*$sgn, $mins);

//Your DB Connection - sample
$db = new PDO('mysql:host=localhost;dbname=test', 'dbuser', 'dbpassword');
$db->exec("SET time_zone='$offset';");

【讨论】:

  • 我可以将它包含在 time.php 文件中,而不是包含在我所有的其他 php 文件中吗?或者我该怎么做?
  • @WouterS 这取决于你想做什么。通常最好不要过多地更改数据库的默认时区,以免数据库条目中的旧时间戳受到更改的影响。
  • @WouterS 如果您只处理时区Europe/Brussels,将数据库设置为一次并且永远不要更改它可能是个好主意。如果您有多个时区的用户,我建议您将数据库时区设置为 UTC 之类的值,然后根据用户查看它对返回的时间进行任何调整。
  • 旧数据乱了也没关系。还在里面测试数据。但是我已经创建了一个名为time.php 的文件并包含了上面的代码。当然用我的数据库凭据。在我使用的每个 php 文件上,我 include ('time.php);'...但我服务器上的时间仍然比我的时间晚 2 小时
  • @WouterS 你可以用查询SET time_zone = 'Europe/Brussels';更新它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 2015-05-15
相关资源
最近更新 更多