Момент получает неправильную дату в запросе Node JS mssql - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь передать даты момента как переменные в запросе. Когда я консольный журнал, даты верны, но когда запрос выполняется, он получает текущую дату -1 ...

Вот код:

const dateEnd = moment().format('YYYY-MM-DD 23:59:59');
const dateStart = moment().format('YYYY-MM-DD 00:00:00');

      // console.log(dateEnd)<-- They come back correct
      // console.log(dateStart)
      // process.exit();

      let pool = await sql.connect(dbconfig)
       //Get records from table
        let getRecords = await pool.request()
            .input('dateStart', sql.Date, dateStart)
            .input('incrm', sql.VarChar, 'yes')
            .input('dateEnd', sql.Date, dateEnd)
            .query('select * from database.dbo.table where someValue in (231312,7132133) and incrm=@incrm and processeddate between @dateStart and @dateEnd and email is not null')

1 Ответ

0 голосов
/ 22 июня 2019

Библиотека node-mssql ожидает, что даты будут переданы как Date объекты.

Попробуйте, если вы хотите, чтобы текущий день находился в том же часовом поясе, что и машина, на которой вы запускаете этот код:

const dateStart = moment().startOf('day').toDate();
const dateEnd = moment().endOf('day').toDate();

Или, если вы хотите текущий день UTC, то:

const dateStart = moment.utc().startOf('day').toDate();
const dateEnd = moment.utc().endOf('day').toDate();

Или, если вы хотите текущий день в определенном часовом поясе (скажем, по центральному времени США),затем используйте дополнительную библиотеку момента и часового пояса:

const dateStart = moment.tz('America/Chicago').startOf('day').toDate();
const dateEnd = moment.tz('America/Chicago').endOf('day').toDate();

Все три из них предполагают, что processeddate соответствует UTC в вашей базе данных.

Вы, вероятно, также должны передатьsql.DateTime2 вместо sql.Date.

...