查询 SQL 时,传递给查询的时间比我设置的时间少 2 小时。为啥?
Posted
技术标签:
【中文标题】查询 SQL 时,传递给查询的时间比我设置的时间少 2 小时。为啥?【英文标题】:When querying SQL, time that passed to query is less 2 hours of the time I set. Why?查询 SQL 时,传递给查询的时间比我设置的时间少 2 小时。为什么? 【发布时间】:2018-02-09 12:22:51 【问题描述】:请指教。
使用 ExtJS 和 Oracle SQL。情况是这样的:
我必须在两个日期dateFrom
和dateTo
之间从数据库获取文件。
我的dateTo
设置为当天结束,例如 2018-02-09 23:59:59。
let dateTo = new Date()
dateTo = Ext.Date.clearTime(dateTo);
dateTo.setHours(23, 59, 59, 999);
当我查询时,过去的日期都比我设置的日期少 2 小时(2018-02-09 21:59:59)。为什么会发生这种情况,有人?是因为这个 GMT+2 业务吗?
capture1.png
来自 SQL 查询,capture2.png
是 console.log(dateTo)
以及如何治愈它。
非常感谢!
【问题讨论】:
可能是由于白天保存 看起来您提供的日期正在从本地时区转换为 UTC,是的。没有看到setHours()
和 SQL 调用之间发生了什么,不知道在什么时候。可能与getTime()
always giving UTC?有关
Alex,DB 调用在我将时间设置为 23:59:59 之后紧随其后。想知道如何防止它减去 2 小时。我是对的,在目前的情况下,我只从 DB 获取到 21:59:59 的文档?干杯
数据库中列的数据类型是什么?
您的 ExtJS 前端是否直接与数据库通信?当我偶然发现同样的问题时,问题既不在前端也不在数据库中,而是在后端逻辑中(你不说你用的是什么:C#、php、JSF...)...... C# 使用的地方奇怪的DateTimeKind
设置。
【参考方案1】:
通过减去 GMT Diff 来计算日期
gmtDiff = Ext.Date.format(dateTo, 'Z') * 1000然后看结果:
Ext.Date.format(dateTo, 'Y-m-d H:i:s')【讨论】:
以上是关于查询 SQL 时,传递给查询的时间比我设置的时间少 2 小时。为啥?的主要内容,如果未能解决你的问题,请参考以下文章