2017-09-11 3 views
4

現在、knexを使用してデータベース(sqlite3)の移行を行っています。私は "users"テーブルを作成しています.2つのタイムスタンプフィールド、created_atupdated_atが必要です。私はそれらをnotNullableにして、テーブルに行を挿入するときにデフォルトで追加します。私はtable.timestamp("created_at).notNullable().defaultTo(knex.fn.now())のようなものを使うことができますが、SQLiteStudioでは、UTCのタイムゾーンでフォーマットされたタイムスタンプYYYY-MM-DD HH:MM:SSを表示します。だから私は2つの質問を持っています:knex.js移行のタイムスタンプフィールド

  1. どのように私のタイムゾーンにこの日付を設定できますか?
  2. sqliteのdatetimeフィールドをSELECTステートメントから取得するとUnixタイムスタンプ(整数)として返され、SQLiteStudioでフォーマットされた日付として表示されるような方法で設定できますか?

これは私の移行コードです:hereを探し

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

は、いくつかの手がかりを与える必要があります。次のようにSQLiteのは5つの日付と時刻の機能をサポートしてい

日付と時刻の関数

は:

date(timestring, modifier, modifier, ...) 
time(timestring, modifier, modifier, ...) 
datetime(timestring, modifier, modifier, ...) 
julianday(timestring, modifier, modifier, ...) 
strftime(format, timestring, modifier, modifier, ...) 

私はアイデアがあると信じ、常にUTCとして回を保存するために、その後、localtimeのために変換し、値を表示する場合はstrftime()を使用します。 datetimelocaltimeフラグを使用して

例が与えられます。

はUnixタイムスタンプ1092941466指定された日付と時刻を計算し、 あなたの地域のタイムゾーンを補います。あなたがstrftime()を必要とする人間が読めるテキストのために

SELECT datetime(1092941466, 'unixepoch', 'localtime'); 

。ちょっと辛いですが、うまくいきます。私は聞いたことがないknexからこれらの種類のクエリが可能であることを期待しています!

関連する問題