Javascript 在IndexedDB&;上查询MomentJS日期;AngularJS-日期与字符串

Javascript 在IndexedDB&;上查询MomentJS日期;AngularJS-日期与字符串,javascript,angularjs,date,momentjs,indexeddb,Javascript,Angularjs,Date,Momentjs,Indexeddb,所以,我刚刚经历了一个“哦,突然”的时刻 我在离线应用程序中使用MomentJS与AngularJS和IndexedDB 所有我的记录都存储在基于对象日期属性的索引date\u idx中 当我尝试使用以下代码基于日期运行查询时,会出现问题: $scope.redoresults = function(){ $indexedDB.openStore('records', function(store){ $scope.upper = moment($scope.dates.endDa

所以,我刚刚经历了一个“哦,突然”的时刻

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

所有我的记录都存储在基于对象日期属性的索引
date\u 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);
    });
  });
};
这个查询提供了奇怪的结果,有时正确,有时不正确。 直到我意识到我实际上是在查询字符串,而不是日期。 因此,2016年8月1日至2016年8月31日之间的查询仍将向我提供包含2016年9月20日的结果,因为作为一个数字,它确实介于范围之间

我觉得我错过了一些结构方面的东西

对如何解决这个问题有何评论

我应该查询其他索引吗?但是我如何比较日期呢?

  • 将日期存储为日期,并使用日期进行查询
  • 或者,将日期存储为时间戳(例如date.getTime()),然后使用时间戳进行查询
  • 不要将日期存储为日期,然后使用字符串日期进行查询,这将产生垃圾邮件
  • 不要将日期存储为字符串,然后使用字符串日期进行查询,这将产生垃圾。字符串值按字典进行比较,这很容易与日期的比较方式不同
      • 将日期存储为日期,并使用日期进行查询
      • 或者,将日期存储为时间戳(例如date.getTime()),然后使用时间戳进行查询
      • 不要将日期存储为日期,然后使用字符串日期进行查询,这将产生垃圾邮件
      • 不要将日期存储为字符串,然后使用字符串日期进行查询,这将产生垃圾。字符串值按字典进行比较,这很容易与日期的比较方式不同

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