[英]Timestamp fields in knex.js migrations
我目前正在使用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);
}),
]);
};
看這里應該給出一些線索。
日期和時間功能
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。
使用的示例localtime
與標志datetime
給出:
在給定unix時間戳1092941466的情況下計算日期和時間,並補償您當地的時區。
SELECT datetime(1092941466, 'unixepoch', 'localtime');
對於人類可讀的文本,您需要strftime()
。 它有點粗糙,但它的工作原理。 我希望從knex可以獲得這些類型的查詢,這是我從未聽說過的!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.