白天节省时间和重复事件。我应该存储什么?

时间:2018-02-01 10:58:12

标签: php mysql datetime

我们拥有与Google Calendar Events相同的系统,现在您可以创建一个事件,它会在那时通知您。

PHP cron作业将每15分钟运行一次,现在可以将设置设置为每天或工作日或周末发送邮件,或者每月的第二天或周末发送邮件。它可以重复几次或永远重复,因此我们无法在表中存储UTC值。我知道我可以存储下一个事件的UTC并更新该列以用于下一个事件。但我认为,应该有更好的方法来实现这一点,然后在每次出现时更改UTC。

我们有一个字段根据您选择的时区存储偏移时间“-04:00”或“-05:00”

我们在早些时候的下拉菜单中有EST,EDT,CST,CDT,PST,PDT,MST,MDT。在选择的值的基础上,我们在DB中保存了偏移,这是一种不正确的方式。

现在当DAYLIGHT SAVING时间变化时,用户必须从EST移动到EDT,反之亦然。现在我们想要解决用户不必更改设置的问题。

想要一个包含“东部,中部,山地,太平洋”的下拉菜单,并希望将该值存储在数据库中。

应该存储什么值?因为我们不想存储偏移量,因为它会随着DST而变化,这将是一种不正确的方式。

另一件事如何运作。我们的服务器采用UTC格式。我们在MySQL中有一个名为“isItCorrectTimeToDoThis”的自定义函数,它检查此时UTC中的时区是否存在任何事件。在这个函数中,我们使用CONVERT_TZ函数。我们有一个每15分钟运行一次的cron作业,但是在MySql中查询获取事件。我希望你们明白这一部分。

我们的服务器中安装了时区表。

什么应该存储在db表字段时区“EST”,“EDT”或“US / Eastern”中。

1>我无法找到CONVERT_TZ的输出(now(),'UTC','EST');当夏令时开启时。

OR

2 - ;我无法找到CONVERT_TZ的输出(now(),'UTC','EDT');当夏令时关闭时。

3> CONVERT_TZ(现在的(), 'UTC', 'US /东部')

哪一个能准确处理夏令时?该用户不必一次又一次地更改其设置。

1 个答案:

答案 0 :(得分:2)

只需将时间存储在UTC中,然后只渲染用户本地时区的时间。这是最好的选择。唯一的转换将在UI中进行,这是您应该关注时区的唯一地方。