2016-09-30 79 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()),然後查詢使用時間戳
  • 不要存放日期爲日期,然後用一個字符串日期查詢,這會產生垃圾。
  • 不要將日期存儲爲字符串,然後用字符串日期查詢,這會產生垃圾。字符串值按照字典順序進行比較,可以輕鬆地區分日期比較的方式。