比较MySQL时间戳和NodeJS

时间:2019-01-03 10:56:05

标签: mysql node.js

我正在尝试将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

3 个答案:

答案 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);