我正在尝试将MySQL的时间戳与NodeJS上的当前时间戳进行比较。
我通过这种方式将时间戳添加到MySQL:
var updateQuery = "UPDATE user SET last_pub = ? + INTERVAL 5 HOUR WHERE uid = '" + uid + "'";
var mysqlTimestamp = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
return req.dbConnection.query(updateQuery, mysqlTimestamp) // I call this to run the query
我以这种方式进行比较:
function checkTime() {
return req.dbConnection.query(checkUser)
.then(([rows, fields]) => {
if (rows != "") {
var rowResult = JSON.parse(JSON.stringify(rows[0]));
var mysqlTimestamp = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
console.log(rowResult.last_pub)
console.log(mysqlTimestamp)
if (rowResult.last_pub > mysqlTimestamp) {
var dict = {}
dict.response = "wait"
console.log("hour not passed");
req.dbConnection.end()
console.log(JSON.stringify({"status": 200, "error": null, "response": dict}))
return res.send(JSON.stringify({"status": 200, "error": null, "response": dict}));
}
else {
console.log("done")
}
}
else {
console.log("Error - user not exist")
}
}).catch((error) => console.log(error));
}
当我尝试打印两个时间戳时,我得到了两个:
2019-01-03T04:02:00.000Z (MySQL result)
2019-01-03 00:02:07 +01:00 (moment result)
问题在于,即使last_pub是mysqlTimestamp的
,小时也是每次“未过去的小时”。
我已经做了一些测试,当我使用rowResult.last_pub> mysqlTimestamp进行检查时,它不是在检查小时,而是在检查日期。因为如果我更改时间,则始终为“小时未过去”,而如果我更改日期,则显示为“完成”。我也要用小时检查一下
N。 =我所有的时间戳都使用UTC(系统和MySQL),并且我们工作的字段的时间类型设置为TIMESTAMP
答案 0 :(得分:1)
您正在比较两个字符串。尝试更换它:
var rowResult = JSON.parse(JSON.stringify(rows[0]));
var mysqlTimestamp = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
console.log(rowResult.last_pub)
console.log(mysqlTimestamp)
if (rowResult.last_pub > mysqlTimestamp) {
与此:
var rowResult = JSON.parse(JSON.stringify(rows[0]));
var nodeTime = new Date();
var mysqlTime = new Date(rowResult.last_pub).getTime();
if (mysqlTime > nodetime) {
答案 1 :(得分:1)
我认为您应该在MySQL中使用unix_timestamp函数生成时间戳。 然后,您应该使用MySQL执行比较并只检索所需的行。
功能:
答案 2 :(得分:0)
您可以使用矩函数isSameOrBefore或isSameOrAfter:
var moment1 = moment(rowResult.last_pub);
var moment2 = moment(); // Current datetime
moment1.isSameOrAfter(moment2);
moment1.isSameOrBefore(moment2);