2014-05-05 64 views
2

我從DatePicker(結束,開始)獲取兩個值。我想過濾數據並在這兩個值之間獲取數據。如何使用JS/Jquery過濾日期和JSon數據

但我無法讓它工作的寫作方式。

要專注於這個問題,讓我們考慮一下(開始日期和結束日期)

// Here I want to 
//var myDate = new Date(); 
var startDate = new Date(2013, 1, 28); 
var endDate = new Date(2013, 1, 30); 

我的數據是既像值:

var filter_data = { 
    "type": "FeatureCollection", 
    "features": [{ 
     "geometry": { 
      "type": "Point", 
      "coordinates": [-73.98115508098644, 40.755304404503995] 
     }, 
     "type": "Feature", 
     "id": 0, 
     "properties": { 
      "Date": "01/20/2013 08:58:03 PM", 
      "lat": 40.755304404503995, 
      "lon": -73.98115508098644, 
      "Address": "33 WEST 44 STREET" 
     } 
    },, { 
     "geometry": { 
      "type": "Point", 
      "coordinates": [-73.968253883967947, 40.765050901514641] 
     }, 
     "type": "Feature", 
     "id": 1, 
     "properties": { 
      "Date": "01/29/2013 02:53:11 PM", 
      "lat": 40.765050901514641, 
      "lon": -73.968253883967947, 
      "Address": "564 PARK AVENUE" 
     } 
    }, 
       ] 
}; 

要過濾數據,我用兩種不同的方法,但這些方法都不起作用。

var filteredData_2 = filter_data.where((n, i) => n.properties.Date <startDate && n.properties.endDate) ; 

var filteredData = filter_data.filter(function(a){return a.properties.Date >startDate && a.properties.Date <endDate;}); 


console.log(filteredData_2) 

console.log(filteredData) 

這裏是喜歡的jsfiddle:

http://jsfiddle.net/dnvrw/1/

回答

1

首先,您需要將您的字符串轉換成JavaScript日期()對象:

function parseDate(dateString){ 
    var dateParts = dateString.split(' '); 
    var dateArr = dateParts[0].split('/'); 
    var timeArr = dateParts[1].split(':'); 
    if(dateParts[2] === 'PM'){ 
     timeArr[0] += 12; 
    } 
    return new Date(dateArr[0], dateArr[1], dateArr[2], timeArr[0], timeArr[1], timeArr[2]); 
} 

然後,你需要實際過濾features array:

var filteredData = filter_data.features.filter(function(a){return parseDate(a.properties.Date) > startDate && parseDate(a.properties.Date) < endDate;}); 

編輯:moonwave99表明,你可以安全地通過傳遞字符串作爲參數,降低了解決方案來創建一個Date():

var filteredData = filter_data.features.filter(function(a){return new Date(a.properties.Date) > startDate && new Date(a.properties.Date) < endDate;}); 

更新小提琴:

http://jsfiddle.net/emVJV/2/

搗鼓簡化答案:

http://jsfiddle.net/2rXBN/2/

+0

它應該是 「>的startDate」 而不是 「<的startDate」。糾正我,如果我錯了 – user3378649

+0

是的,你是對的! – DeeDee

+0

感謝您的出色解釋。非常感謝 – user3378649

1

您比較Date對象[startDateendDate]與普通的字符串。

a.properties.Date到合適的Date對象:

... function(a){ 
    aDate = new Date(a.properties.Date); 
    aDate < startDate && aDate < endDate; 
})