bookshelf/knex 将时间添加到时间戳
bookshelf/knex add time to timestamp
使用 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();
...
但这会抛出:
Unhandled rejection error: date/time field value out of range:
"1544577763253"
也试过
user.set('reset_password_expires', 'NOW()' + '10 minutes'::interval);
但这是无效语法。
我也试过将字段类型更改为 dateTime
,结果相同。
我认为 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(),
});
这是日期时间,但不是时间戳。
使用 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();
...
但这会抛出:
Unhandled rejection error: date/time field value out of range: "1544577763253"
也试过
user.set('reset_password_expires', 'NOW()' + '10 minutes'::interval);
但这是无效语法。
我也试过将字段类型更改为 dateTime
,结果相同。
我认为 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(),
});
这是日期时间,但不是时间戳。