Breeze 查询不提取检查 sql 服务器表中日期列的记录

Breeze query not fetching records that checks for date columns in sql server table

本文关键字:日期 记录 服务器 查询 提取 检查 sql Breeze      更新时间:2023-09-26
var shippedFromDt = new Date(2013, 09, 09);
var query = EntityQuery.from('Shipments')
            .where(breeze.Predicate.create("ShipmentDate", ">=", shippedFromDt))
            .orderByDesc("ID")

我在表格中有记录,其中发货日期为"10/9/2013"。但是当我运行上面的查询时,我没有得到任何记录。如果我将日期更改为"10/8/2013",查询将返回记录。我还使用">="查询运算符,因此当输入日期为"10/9/2013"时,查询应返回数据。我不确定这是否正在发生,因为发货的FromDt也包括时间信息,因为表列仅存储日期。我尝试通过为小时,分钟和秒参数传递0值来创建Date对象,但这无济于事。

Javascript 月索引从 0 开始,因此 09 用于 10 月。

这可能是时区问题。基本上,您在客户端上创建的任何日期都定义为客户端浏览器的时区。 相比之下,存储在数据库服务器上的日期(除非是 DateTimeOffset 或 DateTime2 数据类型(是在未指定任何时区的情况下定义的,因此可以认为 UTC 偏移量为 0。即格林威治标准时间。 因此,您最好的办法是通过客户端时区偏移量调整客户端时间,以将其转换为 GMT 时间;像这样的东西。(我没有检查下面的行,所以标志可能已经关闭(。

var adjustedDate = new Date(yourDate.getTime() - (yourDate.getTimezoneOffset() * 60000));

SO上讨论的类似问题

另一种方法是使用"Z"说明符将日期定义为字符串,以指示您希望日期是 UTC O 偏移量,然后将字符串解析为日期。

最后一种方法是在数据库中使用 DateTime2 或 DateTimeOffset 数据类型,其中所有数据的时区偏移量与客户端上的时区偏移量相同。