Zac*_*ach 10 javascript sql-server datetime node.js sequelize.js
我有一个NodeJS项目,我正在尝试使用Sequelize传递'UpdateDate'字段.我收到错误'从字符串转换日期和/或时间时转换失败'.我试过传递一些不同的东西:
Date.now()
new Date().toISOString()
Run Code Online (Sandbox Code Playgroud)
都没有工作.我错过了一些简单的事吗?我无法更改表上的列定义.据我所知,将诸如"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');
};
Run Code Online (Sandbox Code Playgroud)
我想通了这一点,而无需更改 SQL 数据库中的数据类型。
在我的模型中,我将我的列定义为 DataTypes.DATE,根据 Sequelize 文档,它相当于 SQL 中的 DateTime。但是,这是抛出错误。当我将定义更改为 DataTypes.STRING,然后添加以下内容时:
var normalizedDate = new Date(Date.now()).toISOString();
Run Code Online (Sandbox Code Playgroud)
normalizedDate 现在可以毫无问题地传递到 SQL 中的 DateTime 列。我可以说的问题是,Sequelize 在传递 Date 之前向它添加了一个时区。例如,像这样的日期:
'2017-11-01 16:00:49.349'
Run Code Online (Sandbox Code Playgroud)
被传递为:
'2017-11-01 16:00:49.349 +00:00'
Run Code Online (Sandbox Code Playgroud)
并且看起来 SQL 服务器不喜欢“+00:00”。
我希望这对其他人有帮助。
归档时间: |
|
查看次数: |
7357 次 |
最近记录: |