【发布时间】:2009-10-22 04:03:10
【问题描述】:
一个用户一天内最多可以发帖4次。
困难在于如何在数据库中开始一天的工作?我使用的是 MySQL
【问题讨论】:
-
您是否需要考虑用户和数据库之间的位置/时区差异?我的时区是 GMT +1h .. 你的,我敢打赌是不同的!
一个用户一天内最多可以发帖4次。
困难在于如何在数据库中开始一天的工作?我使用的是 MySQL
【问题讨论】:
如果你存储他的 TimeZone 会更好。世界不同地区的人们有不同的时间,因此每个人的一天开始时间会有所不同。
您可以获得当前日期和当前时间。检查从当天开始00:00 在这一特定天发布了多少帖子。如果数字等于 4,则告诉用户他已达到最大限制。
使用NOW()可以获取当前日期和时间
mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2009-10-22 10:49:15 |
+---------------------+
1 row in set (0.00 sec)
您必须知道您的服务器位于哪个时区,然后将时间设为 UTC 并添加/减去时间以获得用户的本地时间。
您可能想看看MySQL Data and time Reference
DATE() - 获取当前日期CURTIME() - 获取当前时间CONVERT_TZ - 从一个时区转换到另一个时区如何在数据库中开始一天的工作
这应该不是问题,正如我所说,从数据库获取当前时间,调整您的时差以使时间为 UTC。然后调整用户的时区,使时间按照他的时区。
例如3:30(服务器时间) - 1:00(服务器时区) + 5:30(用户时区) = 8:00(用户时间)
因此,该用户一天的开始时间是 00:00,并且该用户已经过 8 小时。
注意:注意时差。例如2:30 - 3:30 = -1:00 表示前一天的 23:00。也要考虑到这一点。
【讨论】:
这将获得基于今天的记录:
SELECT * FROM whatever WHERE date(datefield) = CURdate();
【讨论】:
SELECT datetime FROM posts ORDER BY date LIMIT 3,1
if now - datetime >= 86400: // pick one
if datetime.datepartonly < today:
allow posting
else:
deny posting
如果您确定您的 MySQL 服务器的时间设置正确:
SELECT COUNT(*) FROM posts WHERE DATE_SUB(NOW(), 1 day) <= datetime; // OR
SELECT COUNT(*) FROM posts WHERE CURRENT_DATE() <= datetime;
if count < 4:
allow
else:
deny
【讨论】:
与其专注于一天,为什么不在 24 小时滚动期间限制为 4 个帖子?即,第 4 个最旧的帖子应该与最近的帖子相隔 24 小时以上。
【讨论】: