【问题标题】:Recover timestamps differences between PHP and MySQL恢复 PHP 和 MySQL 之间的时间戳差异
【发布时间】:2017-01-22 04:37:59
【问题描述】:

正如标题中已经说过的,我发现了一个问题(这是一个非常大的问题),因为 PHP date 函数和 MySQL NOW() 函数。

这就是问题所在,在 MySQL 表中,我有一个名为 aggiornamento 的列和一个名为 idesterno 的外部 ID 列,其工作方式如下:

  • 在插入时,它被 MySQL 的 CURRENT_TIMESTAMP 插入,并且 idesterno 也被插入
  • 更新时,它会检查 idesterno 并使用 PHP 的 date 函数更新 aggiornamento

这是问题(相信我,这确实是个大问题):
MySQL NOW()CURRENT_TIMESTAMP 返回正确的时间,2016-09-04 13:20:00,但 PHP 也返回正确的)另一个日期,即 2016-09-04 11:20:00

所以,当我在数据库中插入新记录时,一切正常,但当他更新时,麻烦就来了。

我发现不同之处在于时区,MySQL 有我的 (CEST) 而 PHP 没有,即使它们在同一台服务器上(是的,真的很有趣),使用 date_default_timezone_get 检查.

所以,最后,我需要知道的是:
我知道哪个更新了,但我不知道CURRENT_TIMESTAMPdate('Y-m-d H:i:s)之间的确切时差。
我猜最多大约 1 或 2 小时(基于夏季/冬季时间),但我无法在不知道我是否做得对的情况下编辑这个时间

附:表条目由每 5 分钟运行一次的 CRON 更新

【问题讨论】:

  • 你试过在 php.ini 中设置 date.timezone (php.net/manual/fr/datetime.configuration.php#ini.date.timezone) 吗?
  • @vincenth 我需要用正确的时间戳替换 db aggiornamento 列,这实际上是错误的,因为 MySQL 和 PHP 之间的时区不同。我已经设置了 PHP 时区,但问题是更正旧记录,而不是现在保存的记录。顺便谢谢你

标签: php mysql timezone timestamp


【解决方案1】:

所以,
托管已将“欧洲/罗马”时区设置为 php.ini,但它被 Wordpress 以神秘的方式覆盖为 UTC。

无论如何,在发现这一点后,我已经强制更改了 PHP 脚本中的默认时区,并根据太阳和法定时间更新了错误的数据库记录,增加了 1 或 2 小时。

【讨论】:

    猜你喜欢
    • 2018-07-24
    • 2012-12-14
    • 2011-06-13
    • 2011-09-24
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多