我有一个非常奇怪的问题。我从数据库获取对象,这个对象在应用程序中有不同的日期 - 总是10分钟。我完全不了解这里发生的事情。我使用Symfony2和MySql(MariaDB)。下面的例子(18:50和18:40):
有人有点想法吗?为什么f ** 10分钟,时区在几小时内有所不同..我完全是愚蠢的。求助。
代码:
$synch = $this->getDoctrine()->getManager()->getRepository('LizukKiteBundle:Synchronization')->createQueryBuilder('s')
->orderBy('s.id', 'desc')
->setMaxResults(1)
->getQuery()
->getResult()
;
if ($synch) {
$synch = $synch[0];
} else {
$synch = null;
}
dump($synch);die();
//编辑:
我发现总是只有最后一条记录是错误的日期打印 - 但为什么呢?我不知道:/
如果我从db获得更多对象,那么只有最后一个是"被破坏"。也许它对某人有帮助?
上面只有最后一条记录 - 我猜这个问题出现在代码中..但它看起来还不错。
EDIT ///
好的,问题解决了。我忘记了我在侦听器中的这个数据库表中的最后一个对象,也是在onKernelRequest方法中。而且我在克隆'中遇到了基本的错误。代码:(
我有:
$maintenanceTime = clone $maintenanceTime; //cloning Synchronization object here
$maintenanceTime = $maintenanceTime->getDate();
$maintenanceTime->modify('+5 minutes');
解决方案是:
$maintenanceTime = clone $maintenanceTime->getDate(); //clonning DateTime object
$maintenanceTime->modify('+5 minutes');
不要问我为什么会创建这个弱代码。 请求帮助并浪费你的时间。
答案 0 :(得分:0)
啊,是的,我有同样的问题,但不是PHP
也不是Symfony2
,而是Java
。这是一个普遍的问题。
我遇到的问题是我们在Java7
上运行的应用程序不支持微秒,但只支持毫秒。您的数据库似乎在诱骗您认为它具有值2015-03-29 18:40:18
,但它确实具有类似2015-03-29 18:40:18.123456
的内容。因此,当您尝试将datetime
字符串解析为DateTime
对象时,它会将前3位数加到前3位,产生足够的时间偏移,大约10分钟(在我的情况下,它是12分钟)。
所以,我想,解决方法是检查数据库引擎如何存储DateTime
。它是典型的datetime
类型还是别的什么?
希望这可以解决这个问题:)
答案 1 :(得分:0)
好的,问题解决了。我忘记了我在侦听器中的这个数据库表中的最后一个对象,也是在onKernelRequest方法中。我在'克隆'代码中遇到了基本错误:(
我有:
$maintenanceTime = clone $maintenanceTime; //cloning Synchronization object here
$maintenanceTime = $maintenanceTime->getDate();
$maintenanceTime->modify('+5 minutes');
解决方案是:
$maintenanceTime = clone $maintenanceTime->getDate(); //clonning DateTime object
$maintenanceTime->modify('+5 minutes');
不要问我为什么会创建这个弱代码。请求帮助并浪费你的时间。