我有一个像这样的postgreSQL表:
table.string('id');
table.string('name');
table.specificType('data', 'JSONB');
table.timestamp('runDate');
table.boolean('done').default(false);
我想知道在数据库中插入日期时间的安全方法是什么。
这就是我的所作所为:
await _i_.knex("jobs")
.transacting(ctx ? ctx.transaction : null)
.insert({
id: job.id,
name: job.name,
data: job.data,
id: job.id,
runDate: job.runDate,
done: false
});
当我想查询我的表时,我使用:
return await _i_.knex('jobs')
.transacting(ctx ? ctx.transaction : null)
.whereRaw('"runDate" < NOW()')
.andWhere('done', false)
.returning("*")
.update({
done: true
});
如果我的nodeJS服务器没有比PostgreSQL更快的保存时区,那么我可能会遇到时区问题。
你是如何管理的?
答案 0 :(得分:1)
默认情况下,timestamp with time zone
creates timestamptz
(.timestamp()
)为PostgreSQL的moment
列输入。因此,您的日期和时间与时区一起存储。要插入时间戳值,我想使用const moment = require('moment');
const dateStr = moment().utc().format();
console.log(dateStr); // => Date in format 'YYYY-MM-DDTHH:mm:ssZ'
knex.insert({ runDate: dateStr })
package。
Function
答案 1 :(得分:0)
如何在插入时使用数据库时间:... runDate: knex.raw("NOW()")
...
然后存储和检索日期将同步到同一时区。
但是如果job.runDate
需要毫秒级的准确度,或者记录在存储之前已经持续了很长时间,那么这是不合适的。