从SQL Server返回的带有错误ORM的错误日期

时间:2019-05-05 01:03:08

标签: node.js sequelize.js sql-server-2014-express

我正在使用续集插入并从SQL Server 2014数据库中获取日期。输入数据库的日期是正确的,问题出在退货总是少一天。

  • 续集:5.7.6
  • 乏味:6.1.1
  • SQL Server 2014 Express
  • Cloud AWS RDS。

示例:

  • frontend于1988年4月29日上传(字符串)
  • 后端(序列化)格式29/04/19881988-04-29并保存到SQL Server
  • 前端请求数据
  • 后端查找数据并返回1988-04-28

sequelize模型中的方法:

birthday: {
    get () {
      if (this.getDataValue('birthday')) {
        return moment(this.getDataValue('birthday')).format('DD/MM/YYYY')
      }
    },
    set (val) {
      if (!val) return
      this.setDataValue('birthday', moment(val, 'DD/MM/YYYY').toDate())
    },
    type: DataTypes.DATEONLY,
    allowNull: false,
    defaultValue: '9999-12-31'
  },

即使从顺序返回日期中删除get方法仍要少一天,我相信这可能是时区问题,因为数据库位于aws弗吉尼亚州,而且我在巴西,但是我不知道如何要解决,有人在不同的时区遇到过类似于sequelize和SQL Server的问题吗?

更新

使用DATE类型可以很好地解决问题,但是使用DATEONLY可以解决此问题,因为github中的其他报告可能是后遗症。

该解决方案采用了SQL Server。

这样,就可以使用时间格式正确检索记录的日期。

  birthday: {
    get () {
      if (this.getDataValue('birthday')) {
        return moment(this.getDataValue('birthday')).format('DD/MM/YYYY')
      }
    },
    set (val) {
      if (!val) return
      this.setDataValue('birthday', moment(val, 'DD/MM/YYYY HH:mm:ss a').toDate())
    },
    type: DataTypes.DATE,
    allowNull: false,
    defaultValue: '9999-12-31 00:00:00.000'
  },

例如:

  • 设置9999-12-31 00:00:00.000
  • 获取9999-12-31

0 个答案:

没有答案