2013-11-25 46 views
0

我有數組時間:加入prev和next小時陣列

var hours = ['12:00:00', '12:30:00', '13:00:00']; 

我如何可以添加在30分鐘這一個和下一個小時?我想收到:

var hours = ['11:30:00', '12:00:00', '12:30:00', '13:00:00', '13:30:00']; 

這是最好的方法是什麼?我可以使用jQuery。

這只是一個例子,我想爲每個數組添加prev和next。我也有例如:

var hours2 = ['14:00:00', '14:30:00', '15:00:00', '15:30:00']; 
var hours3 = ['11:00:00', '11:30:00']; 

所以我不知道數組中的值 - 我必須先檢查並添加prev並檢查最後並添加下一個。

+0

如果您計劃在日期/時間/時間內完成大量工作我會建議採用像[時刻](http://momentjs.com/)這樣的圖書館,這將爲您節省數小時的頭痛。 – jbabey

回答

1

你可以嘗試這樣的:

var added = addTime(['12:00:00', '12:30:00', '13:00:00']) 

    // -> ["11:30:00", "12:00:00", "12:30:00", "13:00:00", "13:30:00"] 

function addTime(hours) { 

    var t = ':30:00' 

    // add: 
    hours.slice(0).forEach(function(hour) { 
    var h = parseInt(hour.split(':')[0], 10) 
    hours.push(h-1+t, h+t) 
    }) 

    // strip dups and sort: 
    return hours.filter(function(elem, idx, arr){ 
    return arr.indexOf(elem) >= idx 
    }).sort() 
} 

演示:http://jsfiddle.net/9jKfA/

+0

非常,非常感謝,但我有一個問題。 http://jsfiddle.net/9jKfA/1/你的腳本最好的方式是在一個小時後加0嗎?應該是01,02,... 08,09而不是1,2,...,8,9 – user3033575

+0

@ user3033575 http://jsfiddle.net/m9BhX/創建零方法並調整排序以迎合領先地位零。 – David

+0

非常感謝幫助:) – user3033575

2

只需將元素添加到後面,對其進行排序:

var hours = ['12:00:00', '12:30:00', '13:00:00']; 
hours.push('11:30:00') 
hours.push('13:30:00') 
hours.sort() 
// ["11:30:00", "12:00:00", "12:30:00", "13:00:00", "13:30:00"] 
+0

這假設小時數將被硬編碼,而不是基於數組中已經存在的值,這可能是OP想要的,只有OP可以說明:P – jbabey

+0

@jbabey是的,沒有太多的信息要繼續問題,希望這可以給他們一個開始。 –

+0

對不起,我編輯了我的問題。我不知道數組中的值。 – user3033575

1

您可以使用unshift到預先準備和push追加值的數組。

var hours = ['12:00:00', '12:30:00', '13:00:00']; 
hours.unshift('11:30:00'); //['11:30:00','12:00:00', '12:30:00', '13:00:00']; 
hours.push('13:30:00'); //['11:30:00','12:00:00', '12:30:00', '13:00:00', '13.30.00']; 
0
function addMinutes(time, minsToAdd) { 
    function z(n){ return (n<10? '0':'') + n;}; 
    var bits = time.split(':'); 
    var mins = bits[0]*60 + +bits[1] + +minsToAdd; 
    var secs = bits[2]; 

    return z(mins%(24*60)/60 | 0) + ':' + z(mins%60) + ':' +secs; 
} 

var hours = ['12:00:00', '12:30:00', '13:00:00']; 

hours.unshift(addMinutes(hours[0], -30)); 
hours.push(addMinutes(hours[hours.length-1],30)); 

here改編。顯示09而不是9 ...

var hours = ['09:00:00','12:30:00','13:00:00']; - > 08:30:00,09:00:00,12:30:00,13:00:00,13:30:00