我现在很困惑。我在mysql数据库中有一个注释表。在comments表中有一个字段comment_posted_time (类型为DATETIME),我像这样对所有评论进行排序
$query = "SELECT * FROM comments ORDER BY comment_posted_time DESC";现在,这可能会产生错误的结果。我给你举个例子。假设有两个用户坐在电脑前,一个在印度,另一个在美国。假设印度的时间比美国快10个小时。首先,来自印度的用户发布一条评论,其当前本地时间存储在comment_posted_time (类型为DATETIME)中。1小时后,来自美国的用户发布一条评论,其当前本地时间也存储在comment_posted_time (类型为DATETIME)中。现在,在数据库中,来自美国用户最近发布的评论将不会被计入最新的评论,并且排序将不正确。
如何处理这种情况?
发布于 2013-03-10 18:23:21
你的用户在哪里是没有区别的,你的php和mysql在一台服务器上,所以你一定不会有时间的问题,你可以显示每个用户的时区,通过php转换它,但不要为每个用户更改mysql的默认时区。设计comments表并将其设置为comment_posted_time默认值NOW(),并且不要在插入查询中使用此字段。因此,该字段中的所有记录都将保存在同一时区。
发布于 2013-03-10 18:14:41
如何获取comment_posted_time的日期?通常,这将是MySQL服务器上的当前日期。如果您从客户机获取日期时间(我不推荐这样做),那么您可以获取UTC日期/时间,然后在显示它时将其转换回本地时间。
要存储MySQL服务器中的当前时间,您可以执行以下操作:
update comments set comment_posted_time = NOW() where id=...这将根据客户端的不同而不同。
发布于 2013-03-10 18:17:35
您可以将日期转换为其UNIX_TIMESTAMP,然后按其排序。
$query = "SELECT * FROM comments ORDER BY UNIX_TIMESTAMP(comment_posted_time) DESC";您可以阅读有关UNIX_TIMESTAMP()文档的更多信息。
编辑
您不应该存储相对于不同时区的comment_posted_time。所有的时间都应该与一个时区相关,比如GMT,或者运行php的机器。
https://stackoverflow.com/questions/15321093
复制相似问题