Я использую 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