如何实现用户的发布限制?

时间:2009-10-22 04:03:10

标签: sql mysql datetime

用户最多可在一天内发布4次。

困难在于如何在数据库中获得一天的开始?我正在使用MySQL

4 个答案:

答案 0 :(得分:2)

如果存储他的TimeZone会更好。世界不同地区的人有不同的时间,所以每一天的开始都会有所不同。

您可以获取当前日期和当前时间。检查在这一天{1}}开始的帖子数量。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

如何在数据库中获取当天的开始

这应该不是问题,正如我所说,从DB获取当前时间,调整时差以使时间UTC。然后调整用户的时区,按照他的时区制作时间。

e.g。 3:30(服务器时间) - 1:00(服务器时区)+ 5:30(用户的时区)= 8:00(用户的时间)

因此,此用户的当天开始时间是00:00,此用户已经过了8小时。

N.B:照顾时差。例如2:30 - 3:30 = -1:00,这意味着前一天23:00。考虑到这一点。

答案 1 :(得分:1)

这将获得基于今天的记录:

SELECT * FROM whatever WHERE date(datefield) = CURdate();

答案 2 :(得分:0)

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

答案 3 :(得分:0)

为什么不在24小时滚动期间限制4个帖子?也就是说,第四个最老的岗位应该比最近的岗位多出24小时。