2016-09-30 115 views
0

所以,我刚刚做了一个大“哦!时刻。查询IndexedDB&AngularJS上的MomentJS日期 - 日期与字符串

我在离线应用程序中使用MomentJS和AngularJS和IndexedDB。

我的所有记录都根据对象的date属性与索引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的结果,因为作为一个数字它确实在该范围之间。

我觉得我错过了一些结构明智的东西。

有关如何解决此问题的任何评论?

我应该针对其他索引进行查询吗?但是,我怎样才能比较日期?

+3

将日期存储为ISO字符串或时间戳 – charlietfl

回答

2
  • 将日期存储为日期,并使用日期进行查询。
  • 或者存储日期为时间戳(例如date.getTime()),然后查询使用时间戳
  • 不要存放日期为日期,然后用一个字符串日期查询,这会产生垃圾。
  • 不要将日期存储为字符串,然后用字符串日期查询,这会产生垃圾。字符串值按照字典顺序进行比较,可以轻松地区分日期比较的方式。