2013-08-25 84 views
2

因此,我有這個Web服務器用一定的「時間段」解析XML文件。在JavaScript中解析時間字符串

的時間週期被呈現如下(我不能改變此):

00:05:00 00:09:15 01:13:15HH:MM:SS格式。

我想要做的_.filter()選擇上,例如00:00:0000:10:00之間帶有日期的所有對象,然後用00:10:0000:20:00之間的所有對象的過濾器。

編輯(澄清):隨着時間段的'時間觀看'。比方說,有50個條目的時間段,從00:00:00至1:30:00,但我想讓它包含

  • 的時間週期
  • 平均「的新名單在那段時間內觀看了「時間」。

這意味着我需要某種方式來說:'選擇0分鐘到10分鐘之間的所有時間段。給我一份清單。計算平均值'。

對於這一點,我需要有一定的可能性,做算術運算,看到我想

  • 比較日期
  • 在每次迭代

添加10分鐘然而, Javascript Date對象似乎並沒有處理'正好時間'那麼好,moment.js庫也沒有。我會如何去做這件事?

+0

你能澄清你的意思是在你的第4段(過濾器)?我一直檢查'00:00:00'爲'00:10:00',第二個'00:10:00'爲'00 :20:00'。此外,關於「在每次迭代中添加10分鐘」,對於篩選器中的所有篩選器還是篩選器中的所選篩選器? –

+1

我加了一些說明! –

+1

[將HH:MM:SS字符串轉換爲僅在javascript中的秒數]的可能重複(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 ] ] 
    

    返回數組數組。每個子數組包含槽內倍遞增的順序

  3. 計算平均

    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 ] 
    

    因爲我們正在處理,我們需要一個包裝數組的數組。

最後我會說,如果你有很多條目,數據庫會更快。