【发布时间】:2020-09-10 21:55:58
【问题描述】:
我正在使用 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,并且确实如此。
connection: {
user: '',
password: '',
database: 'DB',
host: 'MSSQL',
dateStrings: true,
options: {
instanceName: 'I'
}
}
你能指出我正确的方向吗?
【问题讨论】:
-
我正在假设这应该“内置”到库中,因为似乎有 MySQL、Oracle、Postgres 的选项......他们说它在司机(乏味?)。无论如何,我的一个想法是将数据转换为 varchar 或其他东西。此外,moment.js 和 DataTables 有点照顾时间转换的东西。
-
JavaScript 只有一个 Date 数据类型,它实际上是一个带时间的日期。它没有单独的日期(仅限日期)和时间数据类型。如果您想要不同的行为,您可以向JSON.stringify() 提供自定义替换器,向JSON.parse() 提供恢复器。
-
AFAIK dateStrings: true 仅适用于 mysql。
标签: node.js sql-server datatables knex.js