我在Javascript(Node.js)和MySQL(通过Sequelizejs管理)中遇到了关于日期减法(时间已过)的非常奇怪的问题。我已经调试过,但还没有找到解决方案。
简单地说,我必须在用户登录时和登出时记录,并计算他们在线的秒(而不是毫秒)。
我的日志表包含以下字段:
问题在于日期时间是否正确存储但时间差异仅为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;