книжная полка / knex добавить время к метке времени - PullRequest
0 голосов
/ 12 декабря 2018

Используя 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 голосов
/ 13 декабря 2018

Я думаю, что PostgreSQL требует, чтобы временная метка была в обычном формате даты-времени (как описано здесь ).В настоящий момент вы проходите миллисекунды с начала эпохи.

В Инструментах разработчика:

> 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(),
});

Это дата и время, но не метка времени.

...