在IndexedDB上查询MomentJS日期AngularJS -日期vs字符串

Querying MomentJS dates on IndexedDB & AngularJS - Dates vs Strings

本文关键字:AngularJS -日期 vs 字符串 日期 MomentJS IndexedDB 查询      更新时间:2023-09-26

所以,我刚刚有一个很大的"哦,啪!"的时刻。

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

我所有的记录都是基于对象的日期属性用索引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()),然后使用时间戳
  • 进行查询
  • 不要将日期存储为日期,然后用字符串date查询,这会产生垃圾。
  • 不要将日期存储为字符串,然后用字符串日期查询,这会产生垃圾。字符串值按字典顺序比较,这很容易与日期的比较方式不同。