Symfony多时区应用程序

时间:2016-11-11 14:51:04

标签: php web timezone symfony

我正在使用Symfony3开发一个Web应用程序,并希望将其传播到世界各地。但我想知道它在不同的时区管理方面是如何运作的。

我在网上寻找这个问题的答案,并在几天后进行了大量的测试。他们都没有工作。

有人有一个神奇的解决方案吗?

更新

我已经了解了像camroncade这样的助手。但这只是转换php时间。 我希望能够直接在SQL中转换时间

我在我的数据库中保存UTC中的所有时间戳。

我有两个想法,但两个都没有用:

1st:创建存储函数convert_tz(timestamp,from,to),并在我想保存或显示时间戳时在所有SQL查询中调用它。 但Symfony无法做到这一点。

第二:告诉mysql用户会话对应的时区,mysql会自动转换为正确的时间。人们告诉我mysql可以做到这一点,但是我没有找到任何关于如何从Symfony告诉mysql的方法。

2 个答案:

答案 0 :(得分:1)

我认为他们说时区仅应设置为显示目的是错误的。在某些时区进行操作很重要,这样可以避免DST更改发生问题。

示例:

    $date1 = new DateTime('2019-08-05 18:00:00', new DateTimeZone('Europe/Warsaw'));
    $date2 = new DateTime('2019-08-05 18:00:00', new DateTimeZone('Europe/Warsaw'));

    var_dump($date1);
    var_dump($date2);

    $date2->setTimeZone(new DateTimeZone('UTC'));

    $date1->modify('+5 months');
    $date2->modify('+5 months');

    $date2->setTimeZone(new DateTimeZone('Europe/Warsaw'));

    var_dump($date1);
    var_dump($date2);

初始日期相等。然后将其中一个转换为UTC,并在两个日期执行相同的操作。最后,日期转换回欧洲/华沙,您意识到$date2现在比$date1晚1小时。

答案 1 :(得分:0)

这可能更像是一个Doctrine / Database问题。从Doctrine项目中检查Working With DateTime Instances

  

使用日期时间类型处理不同的时区

     

如果您第一次遇到保存不同时区的要求   你可能仍然对如何处理这个混乱感到乐观,但让   我快速粉碎你的期望。没有一个数据库了   那里(由Doctrine 2支持)正确支持时区

     

[...]

     

然而,解决方法甚至允许正确的日期时间   处理时区:

     
      
  • 始终将任何DateTime实例转换为UTC。
  •   
  • 仅为显示目的设置时区
  •   
  • 将时区保存在实体中以保持持久性。
  •   

所以它可能但不是那么直接。

在我们的某个应用中,我们会在特定时间向不同时区的用户发送电子邮件和推送通知。在数据库中进行查询时,我们始终会考虑用户的时区。