我有一个用Symfony编写的web服务。应用程序调用它并输入必须在特定时间发送到应用程序的消息。服务器上的cronjob每分钟运行一次,并检查必须发送哪些消息。但是,用户可以定义他希望接收这些消息的时间范围。
我通过以下方式查询这些消息:
$query = $em->createQuery('
SELECT m
FROM MyBundle:Message m
INNER JOIN m.user u
WHERE m.active = true
AND m.nextMessageOn <= :now
AND u.receiveMessagesFrom <= :now
AND u.receiveMessagesTo >= :now
ORDER BY m.id ASC
')->setParameter('now', new \DateTime('now'));
(出于演示目的,“从时间”必须在“到时间”之前)
现在我遇到了问题,用户可以拥有与服务器不同的时区。
是否有某种最佳实践如何处理漏洞时间(日期时间)/时区/服务器/应用程序问题?特别是对于Symfony(Doctrine),有一种干净的方式来查询这些项目吗?
答案 0 :(得分:3)
您应该在数据库中为用户保存正确的时区,并阅读:http://docs.doctrine-project.org/en/latest/cookbook/working-with-datetime.html