Symfony Doctrine按日期时间和时区查询条目

时间:2013-08-09 09:54:44

标签: mysql datetime symfony doctrine timezone

我有一个用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),有一种干净的方式来查询这些项目吗?

1 个答案:

答案 0 :(得分:3)

您应该在数据库中为用户保存正确的时区,并阅读:http://docs.doctrine-project.org/en/latest/cookbook/working-with-datetime.html