如何解决即使dateStrings:true,KNEX也会在服务器响应中向时间戳添加额外的信息
我正在使用KNEX,Node / Express,MSSQL(TSQL)和DataTables / Editor库。
我不了解我的时间戳发生了什么。我需要返回DATE和TIME,但是同时又添加了更多信息。
我正在使用Node中的KNEX查询MSSQL视图:
db.select().table('vueMySuperCoolView')
.where({ StartDate: date })
.orderByRaw('StartTime,LogDate')
.then(data => res.json({ data })) //responds with named array of objects data:[{}]
.catch(err => console.log(err)); //more robust error output options exist
以下是构成视图的一些逻辑:
select
cast(t.StartTime as date) as StartDate,cast(t.StartTime as time) as StartTime
这会在我可以使用的MS SQL Management Studio中产生可接受的输出:
StartDate StartTime
2020-05-21 09:30:00.0000000
2020-05-21 10:00:00.0000000
2020-05-21 10:30:00.0000000
...
但是,在服务器响应中,我的日期和时间看起来像这样:
"StartDate": "2020-05-22T00:00:00.000Z","StartTime": "1970-01-01T13:30:00.000Z",
在支持文章中,建议将“ dateString”选项设置为true,并且设置为true。
connection: {
user: '',password: '',database: 'DB',host: 'MSSQL',dateStrings: true,options: {
instanceName: 'I'
}
}
您能指出我正确的方向吗?
解决方法
如果我的回答比我的要好,我会很乐意接受。
我知道如何解决此问题的唯一方法是将日期强制转换/转换为varchar
。
select
convert(varchar,cast(t.StartTime as date)) as StartDate,convert(varchar,cast(t.StartTime as time),120) as StartTime -- grouping value
强制转换/转换后,日期和时间明确为varchar
,没有附加任何多余的垃圾。可以在前端进行进一步操作(即:使用moment.js)。
另一件事可能很重要……考虑设置options.useUTC
(返回日期/时间数据时,不要让KNEX / JS / NODE操纵时区)
options: {
instanceName: 'MyInstance',// A boolean determining whether or not use UTC time for values without time zone offset (default: true).
useUTC: false
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。