日期差异错误地存储在MySQL数据库中

时间:2014-03-26 13:26:58

标签: javascript mysql node.js datetime sequelize.js

我在Javascript(Node.js)和MySQL(通过Sequelizejs管理)中遇到了关于日期减法(时间已过)的非常奇怪的问题。我已经调试过,但还没有找到解决方案。

简单地说,我必须在用户登录时和登出时记录,并计算他们在线的(而不是毫秒)。

我的日志表包含以下字段:

  • created_at:日期时间
  • exited_at:日期时间
  • time_elapsed:十进制(10,0)

问题在于日期时间是否正确存储但时间差异仅为90%(并非总是)。剩下的,错误的值被保存。我已尝试过不同的减法方法,但没有一种方法可以工作。

错误的值,我的意思是(计算DIFF的脚本如下):

- exit_at                 created_at          time_elapsed     DIFF
- 2014-03-14 09:07:19   2014-03-14 09:04:07      116           192
- 2014-03-15 12:10:06   2014-03-15 12:06:43      3             203
- 2014-03-19 16:32:19   2014-03-19 16:31:27      20            52
- 2014-03-19 20:50:45   2014-03-19 19:28:27      3321          4938
- 2014-03-19 23:55:13   2014-03-19 20:50:45      10926         11068

这就是现在(使用moment.js)计算时差的方法:

log.find({ where: { ... } })
.success( function(logEntry)
{
    if (logEntry)
    {
           var endDate   = moment(date);
           var startDate = moment(logEntry.updated_at);
           var diff      = endDate.diff(startDate, 'seconds');

            logEntry.updateAttributes
            ({
                exit_at: date,
                time_elapsed: diff
            })
    }
});

我已经使用console.log来查看结果是什么,它们是正确的但我不知道它们存储后会发生什么。可能是sequelizejs中的一个错误吗?

顺便说一句,这就是我得错的结果:

SELECT exitedat, createdat, time_elapsed, TIMESTAMPDIFF(SECOND, createdat, exitedat) DIFF 
FROM logs
WHERE TIMESTAMPDIFF(SECOND, createdat, exitedat) > time_elapsed;

0 个答案:

没有答案