如何在knex.js中为CURRENT_TIMESTAMP添加时间偏移量
解决方案
实现逻辑和你使用的数据库类型有关,不同数据库的时间运算语法存在差异,以下是常见数据库的对应写法:
- MySQL 写法
expired_at: knex.raw('DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 1 MINUTE)')
- PostgreSQL 写法
expired_at: knex.raw("CURRENT_TIMESTAMP + INTERVAL '1 minute'")
- SQLite 写法
expired_at: knex.raw("DATETIME('now', '+1 minute')")
如果你希望实现数据库无关的写法,不需要适配不同数据库的语法差异,也可以直接在Node.js侧计算好过期时间再赋值:
// 先计算当前时间+1分钟的Date对象 const expiredAt = new Date(Date.now() + 60 * 1000); return knex(table).insert({ id: uuid.v4(), ...data, created_at: knex.raw('CURRENT_TIMESTAMP'), updated_at: knex.raw('CURRENT_TIMESTAMP'), expired_at: expiredAt })
这种方案的唯一注意点是需要保证应用服务器和数据库服务器的时间同步,否则会出现时间偏差。
内容的提问来源于stack exchange,提问作者dokichan
相关产品推荐
相关产品推荐

