【问题标题】:PHP and SQL timezone off [closed]PHP和SQL时区关闭[关闭]
【发布时间】:2020-12-07 18:14:12
【问题描述】:

我正在尝试使用 PHP 从 MySQL 数据库中获取数据,除了日期之外一切正常。日期已经晚了一天,我只是不知道如何解决它。我在我的 CentOS 8 服务器 PC 上使用 PHPMyAdmin 和 Apache。

数据库上的日期列类型为:datetime,默认值为:current_timestamp()

我正在使用 PHP 将值插入到我的数据库中,但我希望数据库能够自行排序的日期列除外。

我知道我可以尝试更改 MySQL 上的时区(由于查询似乎无法识别欧洲/赫尔辛基时区,我无法找到使其工作的方法)或者我可以在 PHP 端更改它在它显示在网站上之前,但那里也没有运气。

用于获取日期的代码:(+ 一些不同的时间回声)

  date_default_timezone_set('Europe/Helsinki');
  while ($rows = $result->fetch_assoc()) {
          $currdate = date('Y-m-d H:i:s', time());
  }
  echo $currdate;
  $date = date('Y-m-d H:i:s');
  echo $date;
  $newdate = new DateTime($currdate, new DateTimeZone('Europe/Helsinki'));
  echo $newdate->format('Y-m-d H:i:s');
  $timestamp = date('H:i d.m.Y', strtotime($rows['date']));

它们都打印出相同的日期和时间

2020-12-06 18:41:53

当前时间(在撰写本文时)应该是 2020-12-07 20:04:00,这比一天晚了。而且当我尝试其他时区(例如欧洲/巴黎)时,时间根本不会改变。

数据库当前有一些示例数据,因此如果需要创建具有不同默认值的新表,我可以毫无问题地删除所有记录。或者我可以尝试从 PHP 脚本手动插入日期值,但问题仍然存在,因为 PHP 的时区全部错误。

我不知道问题出在哪里。我对这些东西有些陌生,但我已经查过了,并尝试了许多不同的方法,我从这里和其他网站找到了,但没有运气。有什么想法吗?

【问题讨论】:

    标签: php mysql datetime timezone


    【解决方案1】:

    首先,确保您的服务器时钟正确。 (或确保 NTP 服务已启用,以便同步时钟)。

    在服务器级别,您可能希望确保您的服务器时区设置正确。

    假设您使用的是 linux 服务器,要更改 Linux 系统中的时区,请使用 sudo timedatectl set-timezone 命令,后跟要设置的时区的长名称。

    在 PHP 方面,您可以使用 date_default_timezone_set 设置脚本中所有日期/时间函数使用的默认时区

    【讨论】:

    • 我认为问题出在服务器时区上。我一直在使用 cli,所以我什至没有意识到时区是如此偏离。这解决了这个问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多