在 IndexedDB 和 AngularJS 上查询 MomentJS 日期 - 日期与字符串
Querying MomentJS dates on IndexedDB & AngularJS - Dates vs Strings
所以,我刚刚度过了一个重要的 "Oh Snap!" 时刻。
我在离线应用程序中使用带有 AngularJS 和 IndexedDB 的 MomentJS。
我的所有记录都使用基于对象日期 属性 的索引 date_idx
存储。
当我尝试使用以下代码运行 根据日期进行查询时出现问题:
$scope.redoresults = function(){
$indexedDB.openStore('records', function(store){
$scope.upper = moment($scope.dates.endDate).format("DD[/]MM[/]YYYY");
$scope.downer = moment($scope.dates.startDate).format("DD[/]MM[/]YYYY");
var find = store.query();
find = find.$between($scope.downer, $scope.upper, false, false);
find = find.$index("date_idx");
store.eachWhere(find).then(function(e){
$scope.daterange = e;
console.log($scope.daterange);
});
});
};
查询提供了奇怪的结果,有时正确,有时不正确。
直到我意识到我实际上是在查询字符串,而不是日期。
因此,在 01/08/2016 和 31/08/2016 之间的 查询仍然会给我包含 20/09/2016 的结果,因为作为一个数字,它确实在范围内。
我觉得我在结构方面缺少一些东西。
对如何解决这个问题有什么意见吗?
我应该查询其他索引吗?但是我怎样才能比较日期呢?
- 将日期存储为日期,并使用日期进行查询。
- 或者,将日期存储为时间戳(例如 date.getTime()),然后使用时间戳进行查询
- 不要将日期存储为日期,然后使用字符串日期进行查询,这会产生垃圾。
- 不要将日期存储为字符串,然后用字符串日期查询,这样会产生垃圾。字符串值按字典顺序进行比较,这很容易与日期的比较方式不同。
所以,我刚刚度过了一个重要的 "Oh Snap!" 时刻。
我在离线应用程序中使用带有 AngularJS 和 IndexedDB 的 MomentJS。
我的所有记录都使用基于对象日期 属性 的索引 date_idx
存储。
当我尝试使用以下代码运行 根据日期进行查询时出现问题:
$scope.redoresults = function(){
$indexedDB.openStore('records', function(store){
$scope.upper = moment($scope.dates.endDate).format("DD[/]MM[/]YYYY");
$scope.downer = moment($scope.dates.startDate).format("DD[/]MM[/]YYYY");
var find = store.query();
find = find.$between($scope.downer, $scope.upper, false, false);
find = find.$index("date_idx");
store.eachWhere(find).then(function(e){
$scope.daterange = e;
console.log($scope.daterange);
});
});
};
查询提供了奇怪的结果,有时正确,有时不正确。 直到我意识到我实际上是在查询字符串,而不是日期。 因此,在 01/08/2016 和 31/08/2016 之间的 查询仍然会给我包含 20/09/2016 的结果,因为作为一个数字,它确实在范围内。
我觉得我在结构方面缺少一些东西。
对如何解决这个问题有什么意见吗?
我应该查询其他索引吗?但是我怎样才能比较日期呢?
- 将日期存储为日期,并使用日期进行查询。
- 或者,将日期存储为时间戳(例如 date.getTime()),然后使用时间戳进行查询
- 不要将日期存储为日期,然后使用字符串日期进行查询,这会产生垃圾。
- 不要将日期存储为字符串,然后用字符串日期查询,这样会产生垃圾。字符串值按字典顺序进行比较,这很容易与日期的比较方式不同。