NodeJSプロジェクトがあり、Sequelizeを使用して 'UpdateDate'フィールドを渡そうとしています。 「文字列から日付や時刻を変換するときに変換に失敗しました」というエラーが表示されます。私はいくつかの異なるものを渡そうとしました:
Date.now()
new Date().toISOString()
どちらも機能しません。簡単なものがないですか?テーブルの列定義を変更できません。私の知る限り、「2016-05-23 10:39:21.000」などの文字列をSQL DateTimeフィールドに渡すとSSMSで機能しますが、SequelizeとNodeを使用している場合は問題があるようです。
ありがとう
ザック
これは、Sequelizeの 既知の問題 が原因です。解決策は、Sequelizeの日付を ここで説明 のように文字列形式の実装にパッチして、すべての日付が適切に処理されるようにすることです。以下はエラーを修正するコードです。
const Sequelize = require('sequelize');
// Override timezone formatting for MSSQL
Sequelize.DATE.prototype._stringify = function _stringify(date, options) {
return this._applyTimezone(date, options).format('YYYY-MM-DD HH:mm:ss.SSS');
};
SQLデータベースのデータ型を変更せずに、これを理解しました。
私のモデルでは、列をDataTypes.DATEとして定義しました。これは、Sequelizeのドキュメントによれば、SQLのDateTimeに相当します。ただし、これはエラーをスローしていました。定義をDataTypes.STRINGに変更してから、これを追加した場合:
var normalizedDate = new Date(Date.now()).toISOString();
normalDateは、SQLのDateTime列に問題なくパススルーするようになりました。私が言える問題は、Sequelizeが日付を渡す前に日付にタイムゾーンを追加していたことです。次のような日付など:
'2017-11-01 16:00:49.349'
次のように通過されました:
'2017-11-01 16:00:49.349 +00:00'
sQLサーバーは '+00:00'を好まないようです。
これが他の人の役に立つことを願っています。