我有一个网站,用户可以选择升级他们的帐户并获得额外的功能。他们购买包月套餐。比如 1 个月、2 个月等等。
我想在高级帐户到期之前发送一些通知,我可以使用像
这样的 MySQL 查询来做到这一点SELECT DATEDIFF(`end_timestamp`, NOW()) as diff
WHERE NOW() BETWEEN `start_timestamp` AND `end_timestamp` AND
DATEDIFF(`end_timestamp`, NOW()) > -1
这将为我提供具有事件帐户的用户列表,但我的问题是我的用户可以选择更改其时区。所以我必须根据他们的本地时间和帐户到期之前发送通知(例如帐户在 IRDT 晚上 9 点到期,所以最后一个警告应该在 IRDT 晚上 9 点之前的同一天发送,在该时间之后发送是没有好处的。)
我想我可能必须每小时获取高级用户列表及其时区设置,并在 php 中计算本地时间,但我想知道是否有更好的方法来完成整个过程。
抱歉我的英语不好。
最佳答案
将所有时间戳以 UTC 格式保存到数据库中,并将 UTC_offset
字段添加到用户表中。这将允许您进行考虑时区的查询,即使用 CONVERT_TZ()
即假设 end_timestamp
采用 UTC 格式,您的查询将类似于
SELECT DATEDIFF(end_timestamp, UTC_TIMESTAMP()) as diff
WHERE UTC_TIMESTAMP() BETWEEN `start_timestamp` AND `end_timestamp` AND diff > -1
但是,如果您想向用户显示结束时间戳,请将其转换为他的时区:
SELECT CONVERT_TZ(end_timestamp,'GMT',user.UTC_offset) as end_ts, ...
关于php - 如何向用户发送账户充值通知,PHP+MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963246/