9

node.js で Sequelize を使用して、開閉時間を節約しています。また、moment.js を使用してフォーマットしています。私はこれをやっているFindOrCreateを変更します:

result.open = moment(hours.open, "hh:mma").format("YYYY-MM-DD HH:mm:ss");
result.save()
...

これは正常に機能し、時刻は MySQL の日時形式にフォーマットされます。問題は、Seqquelize が UTC 時間であると判断した時間を取得し、それを EST (サーバーのタイムゾーン) に変換するときです。

UTC としてデータベースに入り、同じように出力されることをお勧めします。私が間違っていることはありますか?Sequelize が挿入時に UTC に変換せず、UTC が出てくると想定するのはなぜですか? また、サーバーのタイムゾーンに変換しないようにする方法はありますか?

4

4 に答える 4

9

私も同じ問題を抱えていました。私はこのように修正しました:

config/sequelize.js:

const sequelize = new Sequelize(database, user, password, {
host,
dialect: 'mysql',
port,
operatorsAliases,
dialectOptions: {
    useUTC: true, // -->Add this line. for reading from database
},
timezone: '+02:00', // -->Add this line. for writing to database
pool: {
    max: 10,
    min: 0,
    idle: 10000,
},
logging: console.log,
// define: {},
})

momentJS (UTC):

const ACCEPT_FORMAT = 'YYYY-MM-DD hh:mm:ss'
const { start_date, end_date } = req.params
const start = moment.utc(start_date, ACCEPT_FORMAT)
const end = moment.utc(end_date, ACCEPT_FORMAT)
console.log(start)
console.log(end)

それが誰かを助けることを願っています.... :)

于 2018-01-22T19:34:02.753 に答える
6

私はこれがかなり遅いことを知っていますが、これはpostgresでこれに苦労している人のためのものです(おそらくこれは他のエンジンの正しい方向を指し示すことができます)

ご存知のように、postgres は日時を UTC で保存します。

私にとって、問題は Sequelize ではなく、pgパッケージにあることが判明しました。

それを修正するには、これをsequelize = new Sequelize()行の前に配置します

var types = require('pg').types;
var timestampOID = 1114;
types.setTypeParser(1114, function(stringValue) {
  return new Date( Date.parse(stringValue + "0000") );
});

問題は、pgパッケージが実行していることnew Date(stringValue)であり、サーバーのタイムゾーンで日付を返しますが、これは間違っています (utc 自体でない限り)。

詳細については、次のスレッドを参照してください: https://github.com/brianc/node-postgres/issues/429

于 2015-02-11T13:12:59.417 に答える
2

私は同じ問題に直面しました。あなたは間違った瞬間を使用しています。moment.utcの代わりに使用する必要がありますmoment

その瞬間のドキュメントを見てみましょう: http://momentjs.com/docs/#/parsing/utc/

result.open = moment.utc(hours.open, "hh:mma").format("YYYY-MM-DD HH:mm:ss");
result.save()
于 2014-03-26T15:44:30.350 に答える