Moment在Node JS mssql查询中获得错误的日期

时间:2019-06-21 10:55:09

标签: node.js sql-server momentjs

我正在尝试将时刻日期作为变量传递给查询。当我使用控制台日志时,日期是正确的,但是当查询运行时,它将获得当前日期-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 :(得分:0)

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();

或者,如果要在特定时区(例如美国中部时间)中显示当前日期,请使用moment-timezone附加库:

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

所有这三个条件都假设processeddate是数据库中的UTC。

您可能还应该通过sql.DateTime2而不是sql.Date