【问题标题】:Schedule an E-mail before 24 hours based on users timezone根据用户时区在 24 小时之前安排电子邮件
【发布时间】:2017-02-09 12:42:54
【问题描述】:

我需要在数据库日期的 24 小时之前生成电子邮件。我以 UTC 格式将所有日期保存到数据库中,并且注册用户来自不同的时区。那么我该如何编写查询来获取记录就在 24 小时前根据用户各自的时区向用户发送电子邮件。任何帮助将不胜感激。

【问题讨论】:

  • “24 小时前”是什么意思?在什么?之前
  • 你想看看“排队系统”或“排队管理系统”。这种解决方案基本上通过定期检查到期作业来处理数据库中的任务条目。
  • 基本上我需要一个查询来从一些与用户时区有 24 小时时差的 x 表中获取记录
  • @arkascha just before 24hrs 表示 x 表 createdDate 记录与当前日期时间的差异。
  • 我建议您计算您和用户时区之间的差异,然后使用 mysql 的数据函数来计算查询中的比较。

标签: php mysql email


【解决方案1】:
  1. 使用TIMESTAMP 数据类型,而不是DATETIME 数据类型。 TIMESTAMPs 始终以 UTC 时间存储在 MySQL 中。
  2. 当您为特定用户建立会话时,在存储或检索TIMESTAMP 值之前,使用SET time_zone = 'Asia/Kolkata'; 之类的SQL 命令设置用户的时区。从您的表中检索时,它们将自动转换为当前时区。同样,它们会在存储时转换为 UTC。
  3. 您可以使用 SELECT something FROM table WHERE ready_time >= NOW() + INTERVAL 24 HOUR 之类的查询来查找记录,并使用结果集发送电子邮件或做任何您喜欢的事情。

我不知道您将如何确定用户的时区设置。许多系统将其作为用户偏好。但您需要通过tz database format 获取。

【讨论】:

  • 实际上我们为用户提供了一个下拉菜单来选择他的时区。当一条记录被插入到任何表中时,我们以UTC格式保存它。只是我们使用时区来显示日期。
猜你喜欢
  • 1970-01-01
  • 2014-05-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
相关资源
最近更新 更多