2014-07-06 3 views
2

배열이 있고 날짜 선택기와 버튼이 2 개 있습니다. FROM 날짜와 TO 날짜를 선택하고 버튼을 클릭 한 후이 배열을 2 개의 선택 날짜 사이로 필터링하려고하지만 어떻게 든 작동하지 않습니다. 도와주세요. LIVE CODE배열 - 두 날짜 사이의 필터

HTML

<p>From: <input class="datepicker" id="dateFrom" type="text"> To: <input class="datepicker" id="dateTo" type="text"><button class="buttApply">APPLY</button></p> 

    <div class="text"></div> 
    <table id="myTable" border="1" width="150" cellpadding="5"> 
     <tr><td>DATE LIST</td></tr> 
    </table> 

JS

$(".datepicker").datepicker(); 

var dateFrm = $('#dateFrom').val(); 
var datTo = $('#dateTo').val(); 

     $('.buttApply').click(
      function() 
      { 
       dateList.sort(function(dateFrm, datTo) 
           { 
            return dateFrm > datTo; 
           } 
       ); 


      } 
     ); 

var dateList =[ 
      "07/01/2014", 
      "07/02/2014", 
      "07/03/2014", 
      "07/04/2014", 
      "07/05/2014", 
      "07/06/2014", 
      "07/07/2014", 
      "07/08/2014", 
      "07/09/2014", 
      "07/10/2014", 
    ]; 

    for (var i=0; i< dateList.length; i++) 
     { 
      var tr="<tr>"; 
      var td = "<td>" + dateList[i] + "</td></tr>"; 
      $('#myTable').append(tr+td); 
     } 
+1

당신이 *** 필터 *** 두 날짜 사이의 배열을 의미합니까? 두 일 사이에 어떻게 정렬할까요! – adeneo

+0

감사합니다. 예, '필터'예를 들어 FROM이 2014 년 7 월 1 일이고 TO를 선택하면 2014 년 7 월 6 일이며 2014 년 7 월 1 일, 2014 년 7 월 2 일에 목록을 가져옵니다. ... 07/06/2014 –

답변

2

난 당신이 filter 기능을 사용할 수 있습니다 생각합니다.

filter() 메서드는 제공된 함수로 구현 된 테스트 을 전달하는 모든 요소로 새 배열을 만듭니다.

또한, 여기에 코드에 약간의 수정은 다음과 같습니다

$(".datepicker").datepicker(); 

$('.buttApply').click(
    function() { 
     // Retrieve your dateForm and dateTo value here, otherwise your dateFrm and datTo will be equal to ''. 
     // Also, use filter instead of sort. The filtered variable is your new array. 
     var filtered = dateList.filter(function (item) { 
      return item >= $('#dateFrom').val() && item <= $(
       '#dateTo').val(); 
     }); 

     // Refresh your table 
     refreshTable(filtered); 
    } 
); 

var dateList = [ 
    "07/01/2014", 
    "07/02/2014", 
    "07/03/2014", 
    "07/04/2014", 
    "07/05/2014", 
    "07/06/2014", 
    "07/07/2014", 
    "07/08/2014", 
    "07/09/2014", 
    "07/10/2014", 
]; 

function refreshTable(list) { 
    $("#myTable").html(""); 
    for (var i = 0; i < list.length; i++) { 
     var tr = "<tr>"; 
     var td = "<td>" + list[i] + "</td></tr>"; 
     $('#myTable').append(tr + td); 
    } 
} 

refreshTable(dateList); 

Working demo

희망이 도움이!

+0

대단히 감사합니다, 앙투안! 예, 필터는이 작업에 적합한 기능입니다. –

+0

안녕 앙투안, 설명해주세요. 당신이'var filtered = dateList.filter (function (item)'을 가지고있는 것을 보았습니다. 왜'item'을 먼저 정의 할 필요가 없을까요? 나중에 함수'refreshTable (list)'를 가지고 있습니다. ? 그리고 마지막에는'refreshTable (dateList)'를 가지고 있는데 배열로부터'var dateList'를 가지고 있지만'Table dateList'가 없다는 것을 알았습니다! 혼란 스럽네요. –

+0

'function (item) {}'은 필터 함수가 배열의 각 요소를 호출하는 콜백 함수이고'item'는 배열의 한 항목에 해당하는 매개 변수 이름입니다. refreshTable (list)'.'list'는 매개 변수 이름 일 뿐이며'refreshTable (dateList) '를 호출하면'dateList'가'list' 매개 변수의 인수로 전달됩니다 –

0
var dateList = [ 
     "07/01/2014" 
    , "07/02/2014" 
    , "07/03/2014" 
    , "07/04/2014" 
    , "07/05/2014" 
    , "07/06/2014" 
    , "07/07/2014" 
    , "07/08/2014" 
    , "07/09/2014" 
    , "07/10/2014" 
]; 

function renderTable(dateList) 
{ 
    $('#myTable').html(''); 

    for (var i=0; i< dateList.length; i++) 
    { 
     var tr="<tr>"; 
     var td = "<td>" + dateList[i] + "</td></tr>"; 
     $('#myTable').append(tr+td); 
    } 
} 

// If you need to change dateList element format, 
// just only change this convert function. 
function DateToUnixtime(date_string) 
{ 
    return new Date(date_string).getTime()/1000; 
} 

$('.buttApply').click(function() 
{ 
    var unixtime_from = $('#dateFrom').datepicker('getDate').getTime()/1000; 
    var unixtime_to = $('#dateTo').datepicker('getDate').getTime()/1000; 

    var dateListFiltered = dateList.filter(function(date) 
    { 
     var unixtime = DateToUnixtime(date); 
     return unixtime >= unixtime_from && unixtime <= unixtime_to; 
    }); 

    renderTable(dateListFiltered); 
}); 

$(".datepicker").datepicker(); 

renderTable(dateList); 

이 변형은 앞으로 dateList 요소 형식을 변경해야하는 경우에도 작동합니다.

데모 : http://jsfiddle.net/89wbv/2/

+0

Itnelo에 감사드립니다! 그리고 dateList 요소가 변경되면 작동합니다. 감사합니다! –

0

사용 moment.js

예 :

var startDate = new Date(2013, 1, 12) 
    , endDate = new Date(2013, 1, 15) 
    , date = new Date(2013, 2, 15) 
    , range = moment().range(startDate, endDate); 

range.contains(date); // false