【问题标题】:How to pass a DateTime from NodeJS Sequelize to MSSQL如何将 NodeJS Sequelize 中的 DateTime 传递给 MSSQL
【发布时间】:2018-04-13 20:40:22
【问题描述】:

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

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

都不行。我错过了一些简单的东西吗?我无法更改表上的列定义。据我所知,将诸如 '2016-05-23 10:39:21.000' 之类的字符串传递给 SQL DateTime 字段在 SSMS 中有效,但在使用 Sequelize 和 Node.js 时似乎是一个问题。

谢谢

扎克

【问题讨论】:

  • 谢谢,这是相关的,并且有效。但是,此时更改列类型可能不是一种选择。你知道不改变 SQL 表定义的另一种方法吗?一种从 Javascript/Sequelize 传递有效值的方法?
  • 我根本不知道 sequalize .. 但根据您所说的 new Date().toISOString() 不会产生类似以下的字符串:2017-11-01T14:50:33.239Z 我会尝试将其格式化为 YYYY-MM-DD HH: MM:SS(类似于stackoverflow.com/questions/5129624/…

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


【解决方案1】:

我发现了这一点,没有更改 SQL 数据库中的数据类型。

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

var normalizedDate = new Date(Date.now()).toISOString();

normalizedDate 现在可以毫无问题地传递到 SQL 中的 DateTime 列。我可以说的问题是,Sequelize 在传递之前向 Date 添加了一个时区。例如,日期如下:

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

被传递为:

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

而且看起来 SQL 服务器不喜欢“+00:00”。

我希望这对其他人有所帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这很好用,只需在调用new Sequelize(...)之前实例化覆盖
    • 我用 sequelize 6.12.0-beta.1 (onward) 和类型脚本修改了这个答案,你应该使用:DataTypes.DATE.prototype._stringify = function _stringify(date: Date, options: any) { return this._applyTimezone(date, options).format('YYYY-MM-DD HH:mm:ss.SSS'); };
    【解决方案3】:

    你可以使用这个变量:

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

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 2021-05-15
      • 2015-05-15
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2021-06-09
      相关资源
      最近更新 更多