ard*_*von 6 javascript sqlite datetime node.js knex.js
我目前正在使用 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);
}),
]);
};
Run Code Online (Sandbox Code Playgroud)
小智 1
看这里应该会给出一些线索。
日期和时间函数
SQLite 支持以下五种日期和时间函数:
Run Code Online (Sandbox Code Playgroud)date(timestring, modifier, modifier, ...) time(timestring, modifier, modifier, ...) datetime(timestring, modifier, modifier, ...) julianday(timestring, modifier, modifier, ...) strftime(format, timestring, modifier, modifier, ...)
我相信这个想法是始终将时间存储为 UTC,然后转换为本地时间,strftime()
在您想要显示该值时使用。
给出了使用localtime
标志 with 的示例:datetime
计算给定 unix 时间戳 1092941466 的日期和时间,并补偿您的本地时区。
Run Code Online (Sandbox Code Playgroud)SELECT datetime(1092941466, 'unixepoch', 'localtime');
对于人类可读的文本,您需要strftime()
. 这有点粗糙,但很有效。我希望这些类型的查询可以从 knex 中实现,我什至从未听说过!