2016-09-14 152 views
0

正如在标题中所述,由于PHP date函数和MySQL NOW()函数的存在,我发现了一个问题(这是一个非常严重的问题)。恢复PHP和MySQL之间的时间戳差异

这是问题,在MySQL表我有一个名为aggiornamento列,并命名为idesterno外部ID列,其工作原理是这样的:

  • 在插入时,它会通过MySQL的CURRENT_TIMESTAMP插入,和在 idesterno被插入过
  • 在更新,它会检查使用PHP的date功能idesterno和更新aggiornamento

这里的BIG问题(相信我,这真的是一个大问题):
的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小时(基于夏令时/冬令时),但我不能不知道我是否正确地做了这件事

P.S.表格条目正在由每隔5分钟运行的CRON更新

+0

您是否尝试过在php.ini中设置date.timezone(http://php.net/manual/fr/datetime.configuration.php#ini.date.timezone)? – vincenth

+0

@vincenth我需要用正确的时间戳替换数据库'aggiornamento'列,由于MySQL和PHP之间的时区不同,这实际上是错误的。我已经设置了PHP时区,但问题是纠正较旧的记录,而不是现在保存的记录。谢谢你的方式 – CapitanFindus

回答

0

因此,
主机已将“欧洲/罗马”时区设置为php.ini,但它以奇迹般的方式被Wordpress重写为UTC。

无论如何,在发现这个之后,我强制改变了PHP脚本中的默认时区并更新了基于太阳和法定时间添加1或2小时的错误db记录。