我目前正在使用knex为我的数据库(sqlite3)编写迁移。我正在制作"用户"表格,我希望有两个时间戳字段,created_at
和updated_at
。我希望它们是notNullable并在向表中插入行时默认添加。我可以使用像table.timestamp("created_at).notNullable().defaultTo(knex.fn.now())
这样的东西但是在SQLiteStudio中它显示为格式化的时间戳YYYY-MM-DD HH:MM:SS在UTC时区(所以不是我的时区)。所以我有两个问题:
SELECT
语句中获取它时,它将作为Unix时间戳(整数)返回并仍然在SQLiteStudio中显示为格式化日期?这是我的迁移代码:
exports.up = function(knex, Promise) {
return Promise.all([
knex.schema.createTable('users', function(table) {
table.increments("_id").primary().notNullable();
table.text("login").unique().notNullable();
table.text("given_name").notNullable();
table.text("family_name").notNullable();
table.timestamp("created_at").notNullable().defaultTo(knex.fn.now());
table.timestamp("updated_at").notNullable().defaultTo(knex.fn.now());
table.boolean("is_active").notNullable().defaultTo(true);
}),
]);
};
答案 0 :(得分:0)
寻找here应该提供一些线索。
日期和时间函数
SQLite支持五个日期和时间函数,如下所示:
date(timestring, modifier, modifier, ...) time(timestring, modifier, modifier, ...) datetime(timestring, modifier, modifier, ...) julianday(timestring, modifier, modifier, ...) strftime(format, timestring, modifier, modifier, ...)
我认为我们的想法是始终将时间存储为UTC,然后在您想要显示值时使用strftime()
转换为本地时间。
使用带有localtime
的{{1}}标记的示例:
计算给定unix时间戳1092941466的日期和时间,和 补偿你当地的时区。
datetime
对于人类可读的文字,您需要SELECT datetime(1092941466, 'unixepoch', 'localtime');
。它有点粗糙,但它的工作原理。我希望knex可以提供这些类型的查询,这是我从未听说过的!