2013-08-25 51 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 ] 
    

    因为我们正在处理,我们需要一个包装数组的数组。

最后我会说,如果你有很多条目,数据库会更快。