2013-08-25 2 views
2

그래서 특정 웹 서버에서 XML 파일을 구문 분석 할 수 있습니다. 다음 자바 스크립트의 시간 문자열 구문 분석

시간주기는

(I 이것을 변경할 수 없다)되게된다

00:05:00 00:09:15 01:13:15HH:MM:SS 형식.

가 나는 _.filter() 예를 00:00:0000:10:00에 대한 사이에 날짜와 함께 모든 개체에 선택하고 싶은, 다음 00:10:0000:20:00 사이의 모든 객체에 필터.

EDIT (설명) : 기간은 '시청 한 시간'입니다. 의이 0시 0분 0초에서 1시 30분 0초에 이르는 기간의 50 개 항목이 있습니다,하지만 난

  • 기간
  • 평균 '을 포함하는 새 목록을 만들고 싶어한다고 가정 해 봅시다 그 시간대에 시청 한 시간.

즉, '0 분에서 10 분 사이의 모든 기간을 선택하십시오. 그 목록을 나에게주세요. 평균을 계산하라.

이를 위해, 내가

  • 그러나 각 반복

에 10 분 추가

  • 날짜를 비교하고 싶습니다보고, 산술 연산을 수행하는 몇 가지 가능성이해야 할 것 Javascript Date 개체가 '당분간'잘 처리되지 않는 것 같습니다. moment.js 라이브러리도 마찬가지입니다. 어떻게 내가 이걸 갈 수 있니?

  • +0

    네 번째 단락 (필터)에서 의미하는 바를 명확하게 설명해 주시겠습니까? 나는'00 : 00 : 00'을'00 : 10 : 00'으로 한 번 확인하고,'00 : 10 : 00'을'00으로 확인한 후'_.filter()'를 두 번 실행하기를 원한다. : 20 : 00'. 또한 "각 반복마다 10 분 추가"에 대한 내용은 필터에있는 모든 항목 또는 필터 내에서 선택된 항목입니까? –

    +1

    몇 가지 설명을 추가했습니다! –

    +1

    가능한 복제본 [HH : MM : SS 문자열을 초 단위로 변환 만 가능] (http://stackoverflow.com/questions/9640266/convert-hhmmss-string-to-seconds-only-in-javascript) – WiredPrairie

    답변

    -1

    가장 간단한 방법은 모든 것을 초 단위로 변환 한 다음 작업을 수행하는 것입니다. 여기

    inSeconds = function(time) { 
        var secs, arr = []; 
        arr = time.split(':').map(function(item) { return parseInt(item) }); 
        secs = arr[0]*3600 + arr[1]*60 + arr[2]; 
        return secs; 
    } 
    
    +0

    이걸 시험해? – user568109

    +0

    오, 내 잘못, 내가 int로 문자열을 변환하지 않았다면. –

    0

    내가 JS에서하는 방법은 다음과 같습니다

    times=['00:05:00', '00:09:15', '01:13:15']; 
    
    1. 가 먼저

      function getsec(time){ 
          arr=time.split(':'); 
          return (+arr[0])*3600 + (+arr[1])*60 + (+arr[2]); 
      } 
      
      times.map(getsec) 
      [ 300, 555, 4395 ] 
      
    2. 그런 다음 특정 기간의 슬롯에 배를 필터링 초

      을 얻을

      function filter(last, curr, index, array){ 
          chk=parseInt(curr/600); //slots for 10 minutes 
          if (typeof last[chk] === 'undefined') 
          { 
          last[chk]=[]; 
          last[chk].push(curr); 
          } 
          else 
          last[chk].push(curr); 
          return(last) 
      } 
      
      times.map(getsec).reduce(filter,[]); 
      [ [ 300, 555 ], , , , , , , [ 4395 ] ] 
      

      배열의 배열을 반환합니다. 각각의 아이 배열은 우리가 래퍼가 필요 배열의 배열을 취급하고 있기 때문에 계산이

      function avg(last, curr, index, array){ 
          if(index==array.length-1) 
          return (last+curr)/array.length; 
          else 
          return last+curr; 
      } 
      
      times.map(getsec).reduce(avg,0); 
      1750 
      
      function getavg(arr){ 
          return arr.reduce(avg,0); 
      } 
      
      times.map(getsec).reduce(filter,[]).map(getavg); 
      [ 427.5, , , , , , , 4395 ] 
      

      을 의미

    3. 위해

      증가에 슬롯 내에서 시간이 포함되어 있습니다.

    마지막으로 많은 항목이 있으면 데이터베이스가 더 빠를 것이라고 말하고 싶습니다.