书架/ knex增加时间戳记时间

时间:2018-12-12 01:24:58

标签: node.js datetime timestamp knex.js bookshelf.js

使用NodeJS,Knex,Bookshelf JS ORM和PostgreSQL,我有一个字段table.timestamp('reset_password_expires');-如何设置将来的日期(比如说距现在10分钟)?

我尝试过:

new User.User({'email': email}).fetch().then((user) => {
      user.set('reset_password_expires', Date.now() + 60000);
      user.save();
      ...

但是抛出:

  

未处理的拒绝错误:日期/时间字段值超出范围:   “ 1544577763253”

也尝试过

user.set('reset_password_expires', 'NOW()' + '10 minutes'::interval);

但这是无效的语法。

我还尝试将字段类型更改为dateTime,结果相同。

1 个答案:

答案 0 :(得分:1)

我认为PostgreSQL要求时间戳记必须采用普通的日期时间格式(如here所述)。目前,您距纪元已过去了毫秒。

在开发人员工具中:

> Date.now() + 60000
1544706877041

您可以改用此方法:

new Date((new Date()).getTime() + 60000)

在开发人员工具中:

> new Date((new Date()).getTime() + 60000)
Thu Dec 13 2018 14:15:50 GMT+0100 (Central European Standard Time)

这是我自己使用的实用程序功能:

module.exports.inHours = (hours) => {
  const minutes = hours * 60;
  const seconds = minutes * 60;
  const milliseconds = seconds * 1000;

  return new Date((new Date()).getTime() + milliseconds);
};

我的代码看起来与您的代码略有不同,但这就是我调用该函数的方式:

await userQueries.update(user.user_id, {
  resetPasswordToken: resetToken,
  resetPasswordExpires: inHours(1),
  modified_at: new Date(),
});

这是日期时间,但是不是时间戳。