Sequelize преобразует переданный объект даты в локальную дату

Когда я выполняю запрос, в котором данные переданы в качестве замены, дата не устанавливается как UTC-Date в запросе.

Мой код:

let startInterval = moment('2020-12-09').toDate();

db.query(`
    SELECT kv.kpiId
    FROM kpiValues kv
    WHERE kv.insertDate >= :startInterval
`, {
    type: QueryTypes.SELECT,
    replacements: {
        startInterval: startInterval,
    }
}).catch(next)

Печать переменной startInterval приводит к 2020-12-08T23:00:00.000Z. Когда я вывожу запрос, он показывает

SELECT kv.kpiId
FROM kpiValues kv
WHERE kv.insertDate >= '2020-12-09 00:00:00.000'

Столбец является продолжением столбца даты (SQL Datetime). Значение в запросе — это мое местное время, но база данных должна использовать только значения UTC, поэтому я ожидаю, что она будет использовать 2020-12-08T23:00:00.000 в запросе. Что я могу сделать?

Соединение продолжения:

const sequelize = new Sequelize(dbName, dbUser, dbPassword, {
    host: Settings.dbUrl,
    port: dbPort,
    dialect: 'mariadb',
    dialectOptions: {},
    timezone: '+00:00',
    pool: {
        max: 70,
        min: 5,
        acquire: 30000
    },
    define: {
        timestamps: false,
        freezeTableName: true
    },
    logging: true // Remove property when all statements that are executed should be printed
});

Какую СУБД вы используете?

Anatoly 12.12.2020 19:33

@Анатолий МарияДБ

TheProgrammer 12.12.2020 19:51

В MariaDB дата и время хранятся as is без информации о часовом поясе. Смотрите mariadb.com/kb/en/datetime/#time-zones

Anatoly 12.12.2020 20:00

@Анатолий, а можно что-нибудь сделать? Неужели сиквелиз никогда не справляется с этим в необработанных запросах SELECT? В функциях вставки и обновления продолжения он автоматически использует время UTC.

TheProgrammer 12.12.2020 20:13

Можете ли вы передать дату и время UTC в виде строки?

Anatoly 12.12.2020 20:19

@ Анатолий Да, я могу это сделать - наконец-то я это сделал. Но я бы назвал это обходным путем, я думаю, что sequenceize должен предоставить метод для автоматического выполнения этого для каждой даты, которая передается, как это делается в функции создания или обновления. Эта функция отсутствует для необработанных запросов. Спасибо за вашу помощь!

TheProgrammer 12.12.2020 21:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
6
1 100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку нет решения этой проблемы с mariaDB в качестве СУБД, использующей секвенирование, работает следующий обходной путь: Просто вручную передайте заменяющую переменную как UTC-String:

dateVariable.toISOString()

Другие вопросы по теме