php - 如何向用户发送账户充值通知,PHP+MySQL

标签 php mysql

我有一个网站,用户可以选择升级他们的帐户并获得额外的功能。他们购买包月套餐。比如 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/

相关文章:

mysql - 为 DATE 或 DATETIME 设置默认值时 MySQL 出错

javascript - jquery ajax html 警报中的 "\r\n\"

mysql - ruby 、MySQL : Connection pool that is outside of the rails framework?

php - Curl 不写入文件 cookie

php - Laravel phpUnit

php - 如何使用 PHP、MySQL 和 Ajax 正确显示数据?包含链接

mysql - 使用 log4net 存储日志信息

mysql - MySQL 创建语句时出错

php如何从下拉列表中获取选定的值?

php - CakePHP 验证规则 : alphanumeric with spaces