1
var shippedFromDt = new Date(2013, 09, 09);
var query = EntityQuery.from('Shipments')
            .where(breeze.Predicate.create("ShipmentDate", ">=", shippedFromDt))
            .orderByDesc("ID")

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

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

4

1 回答 1

1

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

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

在 SO 上讨论的类似问题

另一种方法是将您的日期定义为带有“Z”说明符的字符串,以指示您希望您的日期为 UTC O 偏移量,然后将该字符串解析为日期。

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

于 2013-10-09T16:31:09.560 回答