我有一个 Ubuntu/Apache2/PHP (Symfony2)/MySQL 日期问题。我认为这是一个系统问题,因为我在开发环境中没有它,只有在 rec 和 prod 环境中。当我发布包含日期时间的表单时,数据库中输入的时间比我输入的时间少 2 小时。当我阅读它时,屏幕上的日期时间与数据库中的日期时间相同。 2 小时时差符合我的时区(欧洲/巴黎)。
开发环境:
- 本地机器
- Ubuntu 16.04 LTS 桌面
- Apache/2.4.18 (Ubuntu)
- Mysql 5.5.43-0+deb8u1 在局域网上的 Debian 8 虚拟主机上
- PHP 7.0.8-0ubuntu0.16.04.2,Symfony 2.8.7
录制/制作环境:
- 都在同一个专用服务器上
- Ubuntu 15.10 服务器
- Apache/2.4.12
- MySQL 5.6.28-0ubuntu0.15.10.1
- PHP 5.6.11-1ubuntu3.1
当我在两台机器上运行 date -R
时,我有一个匹配项:Sat, 24 Sep 2016 19:39:53 +0200
,再过几秒钟 &更少,这是我输入命令所花费的时间。
/etc/timezone
在两台机器上都包含“Europe/Paris”。
在两台机器上,PHP 的(CGI 端)date.timezone 也是“Europe/Paris”。
在两台机器上,SQL 查询 SELECT @@global.time_zone, @@session.time_zone;
返回 "SYSTEM"& "SYSTEM"
我使用基于 moment.js 的引导日期时间选择器来输入此日期和时间。但我通过检查浏览器控制台中的 POSTed 数据并确认日期未被更改,将其从嫌疑人中排除。
两台机器上的应用程序代码相同(相同的颠覆版本)。
你看到其他东西要测试了吗?
最佳答案
可能是由于 this PR 最近才合并。
尝试改变这个
- $dateTime = new \DateTime(sprintf('@%s', $timestamp), new \DateTimeZone($this->outputTimezone));
+ $dateTime = new \DateTime(sprintf('@%s', $timestamp));
+ // set timezone separately, as it would be ignored if set via the constructor,
+ // see http://php.net/manual/en/datetime.construct.php
+ $dateTime->setTimezone(new \DateTimeZone($this->outputTimezone));
在
DateTimeToLocalizedStringTransformerTest.php
参见 this .
关于php - 需要时区调试帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39679532/