如何将DateJ从NodeJS Sequelize传递给MSSQL

时间:2017-11-01 13:47:16

标签: javascript sql-server node.js datetime sequelize.js

我有一个NodeJS项目,我正在尝试传递一个' UpdateDate'使用Sequelize的字段。我收到错误'从字符串转换日期和/或时间时转换失败'。我试过传递一些不同的东西:

Date.now()
new Date().toISOString()

都没有工作。我错过了一些简单的事吗?我无法更改表上的列定义。据我所知,传递的字符串如2016-05-23 10:39:21.000'到SQL DateTime字段在SSMS中工作,但在使用Sequelize和Node时似乎是一个问题。

由于

扎克

3 个答案:

答案 0 :(得分:7)

这是由Sequelize中的known issue引起的。解决方案是将Sequelize的日期修改为字符串格式实现,如explained here,以便正确处理所有日期。下面是修复错误的代码。

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');
};

答案 1 :(得分:3)

我想到了这一点,而没有改变SQL数据库中的数据类型。

在我的模型中,我将我的列定义为DataTypes.DATE,根据Sequelize文档,它相当于SQL中的DateTime。然而,这是抛出错误。当我将定义更改为DataTypes.STRING,然后添加:

'2017-11-01 16:00:49.349 +00:00'

normalizedDate现在传递到SQL中的DateTime列而没有任何问题。我能说的问题是,Sequelize在传递之前在Date上添加了一个时区。比如,日期如:

data-ng-repeat

正在通过:

display: inline-block;

看起来SQL服务器不喜欢' +00:00'。

我希望这有助于其他人。

答案 2 :(得分:0)

你可以使用这个变量:

const timestamps = new Date() + 3600 * 1000 * 7;