查询 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。情况是这样的: 我必须在两个日期dateFromdateTo 之间从数据库获取文件。 我的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.pngconsole.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 小时。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP PDO 在 SQL 中将多行传递给 UDF

将原始 SQL 查询传递给 Laravel 上的查询构建器

将php数组传递给sql查询[重复]

将php数组传递给sql查询[重复]

将自定义字段传递给 SQL 查询

如何在 node.js 环境中将查询语句传递给 bigquery