Неверная дата возвращена из SQL Server с секвелированием ORM - PullRequest
0 голосов
/ 05 мая 2019

Я использую sequelize для вставки и получения даты из моей базы данных SQL Server 2014. Дата, введенная в базу данных, верна, проблема в возврате, который всегда на один день меньше.

  • Sequelize: 5,7,6
  • Утомительно: 6.1.1
  • SQL Server 2014 Express
  • Облако AWS RDS.

Пример:

  • внешний интерфейс загружен 29.04.1988 (строка)
  • формат бэкэнда (sequelize) 29/04/1988 до 1988-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 из sequelize возвращение даты по-прежнему на один день меньше, я думаю, что это может быть проблемой с часовым поясом, поскольку база данных находится в штате Вирджиния, а я в Бразилии, но я понятия не имею, как чтобы решить, была ли у кого-нибудь проблема, похожая на 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
...