格式化date时,NodeJS小时内的SQL查询处于closures状态
我想在我的查询中SELECT FORMAT(MAX(dTime),'yyyy-MM-dd hh:mm:ss') FROM triangulations
dtime2字段: SELECT FORMAT(MAX(dTime),'yyyy-MM-dd hh:mm:ss') FROM triangulations
这给出了输出{result:[{'':'03:34:30'}],rowcount:1}
小时数应该是15.当查询格式不存在时,这也会显示出来。 查询: SELECT MAX(dTime) FROM triangulations
给出输出:
{result:[{'':Mon Jul 17 2017 15:34:30 GMT + 0000(Coordinated Universal Time)}],rowcount:1}
我使用库node-mssql-connector在NodeJs中执行查询。
为什么SQL给我错误的时间?
在你的格式string中, yyyy-MM-dd hh:mm:ss
, hh
表示你想要12小时制格式的小时数,所以3和15总是3(AM和PM)。 使用HH
以24小时制的格式获取它们:
yyyy-MM-dd HH:mm:ss
相关文档 ,向下滚动到格式说明符列表。
你应该使用HH而不是hh:
SELECT FORMAT(MAX(dTime),'yyyy-MM-dd HH:mm:ss') FROM triangulations
通常情况下,如果分钟和date不好,你的时间不好,意味着你使用了错误的时区。 这可能意味着将错误时区中的时间写入数据库,或者您正在从期望的某个其他时区获取数据库中的date。
在处理date时,您应该始终明确时区(在将date放入数据库时,您似乎没有这样做),而且如果始终以UTC(date)保存date似乎是你在这里阅读date的情况)。
在Node中,您可以使用Moment模块(特别是Moment Timezone)来转换date。 看到:
看到这个答案的一些例子 – 这是关于Mongo而不是SQL服务器,但你可以在这里使用完全相同的转换:
- Mongoose使用UTC时间保存和检索date,更改为服务器时区