格式化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:sshh表示你想要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,更改为服务器时区