问题描述
我正在使用KNEX,Node / Express,MSsql(Tsql)和DataTables / Editor库。
我不了解我的时间戳发生了什么。我需要返回DATE和TIME,但是同时又添加了更多信息。
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
}