2017-11-18 19 views
1

timezoneオプションを自分のタイムゾーン(Europe/Zagrebと私は+01:00で試してみました)に設定しましたが、データベースから時刻を読み取るときには時間が保存されますが、 SequelizeはUTCに変換されます。私は別のタイムゾーンも試してみましたが、それぞれ正しく保存されていますが、データベースから読み込むと常にUTCに変換されます。SequelizeはUTCでdatetimeを読み取ります

私は間違ったことをしていますか、これは既知の問題であり、回避策がありますか?

私はとの新しい接続を作成:

sequelize = new Sequelize(config.database, config.username, config.password, config); 

と私の設定は次のようなものになります。あなたはこのコードを試すことができます

"development": { 
    "username": "root", 
    "password": "root", 
    "database": "db", 
    "host": "localhost", 
    "dialect": "mysql", 
    "timezone": "Europe/Zagreb" 
} 

答えて

2

を、私は同じ問題を抱えていたし、これは私のために働きました。

const sequelize = new Sequelize(mysql.database, mysql.user, mysql.password,{ 
host: mysql.host, 
port:3306, 
dialect:'mysql', 
define: { 
    underscored: true, 
    freezeTableName: true, //use singular table name 
    timestamps: false // I don't want timestamp fields by default 
    }, 
dialectOptions: { 
    useUTC: false, //for reading from database 
    dateStrings: true, 

    typeCast: function (field, next) { // for reading from database 
     if (field.type === 'DATETIME') { 
     return field.string() 
     } 
     return next() 
    }, 
}, 
timezone: '+01:00' 

})

+0

おかげで、中にちょうど 'typeCast'機能' dialectOptions'は、私の場合はトリックをしました。 – Vedran

+0

私はこのメソッドを動作させることができません。 Sequelizeは、データの挿入と読み取りの際にUTCを使用しています。ローカルでのみ動作しますが、自分のアプリケーションを自分のサーバーにアップロードするときは動作しません。私のサーバーは自分のタイムゾーンを使用するように設定されており、MySQLサーバーはシステムタイムゾーンを使用するように設定されています。 これはなぜ機能しないのでしょうか? – user3183411

+0

@ user3183411 'timezone: '+01:00' //あなたのタイムゾーンをここで使用する'はデータベースに書き込むために使用され、dateTimeフィールドに正しい値を書き込んでいるかどうかをチェックし、 'dialectOptions'の' typeCast'関数です。 –

関連する問題