簡體   English   中英

knex.js遷移中的時間戳字段

[英]Timestamp fields in knex.js migrations

我目前正在使用knex為我的數據庫(sqlite3)編寫遷移。 我正在制作“用戶”表,我希望有兩個時間戳字段, created_atupdated_at 我希望它們是notNullable並在向表中插入行時默認添加。 我可以使用像table.timestamp("created_at).notNullable().defaultTo(knex.fn.now())但是在SQLiteStudio中,它顯示為格式化的時間戳YYYY-MM-DD HH:MM:SS的UTC時區(所以不是我的時區)。所以我有兩個問題:

  1. 如何將此日期設置為我的時區?
  2. 是否有可能以這種方式在sqlite中設置datetime字段,當我從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM