我对Timestamps及其比较的主题感到非常困惑。
我想要的是:我有一个小聊天应用程序。每当用户在聊天室内时,每隔5秒就会向服务器发送一个异步请求,其时间为毫秒(从5秒前开始,该过程是
现在首先,我通过Javascript获得实际的毫秒数
var now = new Date();
lastChatChecked = new Date(now.getUTCFullYear(),
now.getUTCMonth(),
now.getUTCDate(),
now.getUTCHours() + 1,
now.getUTCMinutes(),
now.getUTCSeconds(),
now.getUTCMilliseconds());
lastChatChecked = lastChatChecked.getTime();
请注意,我必须在小时字段中添加+1,因为时间戳总是比我的时间晚一个小时。现在,将此值发送到服务器并执行此类操作
SELECT commentContent, commentDate, userName
FROM chatComment c, User u
WHERE commentDate < ".$m."
AND c.userID = u.userID
AND teamID=".$tid."
ORDER BY c.commentDate DESC;
其中$ m是毫秒。这不起作用!我通过创建数据库中某些日期值之间的millis值手动测试它,并且没有给出结果。
现在,我应该在可比较的时间戳中将php转换为php,还是有其他方法可以做到这一点?我在一个如此问题中看到了这种方法
WHERE commentDate < DATE_SUB(now(), INTERVAL 5 SECONDS)
但仍然没有结果。
方案
(从头开始,我没有这里的计划)
CREATE TABLE User(
userID INTEGER AUTO_INCREMENT NOT NULL,
userName VARCHAR(20) NOT NULL,
userPW VARCHAR(200) NOT NULL,
...
PRIMARY KEY (userID),
UNIQUE (userName)
)ENGINE=innodb;
CREATE TABLE(
commentID INTEGER AUTO_INCREMENT NOT NULL,
userID INTEGER NOT NULL,
teamID INTEGER NOT NULL,
commentContent VARCHAR(250) NOT NULL,
commentDate TIMESTAMP NOT NULL,
PRIMARY KEY (commentID),
FOREIGN KEY (userID) REFERENCES User (userID),
FOREIGN KEY (teamID) REFERENCES Team (teamID)
)ENGINE=innodb;
PHP
function getNewestMessages($m){
mysql_query ('SET CHARACTER SET utf8');
$res = mysql_query("SELECT teamID FROM Team WHERE teamName='".$_SESSION['tn']."';");
$temp = array();
while($row = mysql_fetch_array($res)){
$temp[] = $row;
}
$tid = $temp[0]['teamID'];
$query = "SELECT commentContent, commentDate, userName from chatComment c, User u WHERE commentDate < ".$m." AND c.userID = u.userID AND teamID=".$tid." ORDER BY c.commentDate DESC;";
$res2 = mysql_query($query);
$temp2 = array();
while($row2 = mysql_fetch_array($res2)){
$temp2[] = $row2;
}
echo json_encode($temp2);
}
SELECT commentDate FROM chatComment;
2014-02-06 21:50:08
2014-02-06 21:50:11
2014-02-06 21:53:11
2014-02-06 21:54:12
2014-02-06 21:54:17
2014-02-06 21:56:16
编辑时,一些结果
echo json_encode($m)
"1391792194985"
"1391792198943"
"1391792203927"
echo json_encode(round($m/1000))
1391792144
1391792149
1391792154
1391792159
(似乎Javascript函数date.getTime()确实返回millis ...)
答案 0 :(得分:1)
首先,听起来你的$ m值是以毫秒为单位。现在我不确定这是否意味着从纪元开始的毫秒数,如毫秒时间戳,但如果是,则需要将其转换为秒。 MySQL时间戳以秒为单位。
SELECT commentContent, commentDate, userName
FROM chatComment c, User u
WHERE commentDate < ".$m/1000."
AND c.userID = u.userID
AND teamID=".$tid."
ORDER BY c.commentDate DESC;
此外,您的&#39;&lt;&#39;标志似乎倒退了。如果您想要之后的所有条目需要的时间
commentDate > ".$m/1000."
最后,看起来你的架构是错误的,而commentDate不是时间戳。它实际上是一个&datetime&#39;,它是不同的。因此,您需要将时间戳转换为日期时间:
commentDate > FROM_UNIXTIME($m/1000)