2014-07-24 9 views
2

我試圖在JavaScript中使用循環在數組中存儲值。它只對我有部分作用。JavaScript通過循環陣列設置時間差

我想存儲時間數組

將有開始時間,結束時間和間隔

例如: 如果想從9:00時至10:00與間隔15分鐘,就應打印

09:00,09:15,09:30,09:45,10:00

但它的打印

09 :00,09:15,09:30,09:45,10:00,10:15,10:30,10:45

第二我應該怎麼做,如果我想得到9: 30和10:30?或9:45和10:45?

這裏是我的代碼:

HTML

<div id="time"></div>

的JavaScript

var array = new Array(); 
var timeDiff = 15; 
var FirstTime = 9; 
var endTime = 10; 
for (var xh = FirstTime; xh <= endTime; xh++) { 
    for (var xm = 0; xm < 60; xm += timeDiff) { 
     array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2)); 
    } 
}; 
$('#time').text(array) 

JsFiddle

回答

2

嗨,我已經創建了一個的jsfiddle例如: -

var setIntervals = function (start, end, inc) { 
    start = start.toString().split(':'); 
    end = end.toString().split(':'); 
    inc = parseInt(inc, 10); 

    var pad = function (n) { return (n < 10) ? '0' + n.toString() : n; }, 
     startHr = parseInt(start[0], 10), 
     startMin = parseInt(start[1], 10), 
     endHr = parseInt(end[0], 10), 
     endMin = parseInt(end[1], 10), 
     currentHr = startHr, 
     currentMin = startMin, 
     previous = currentHr + ':' + pad(currentMin), 
     current = '', 
     r = []; 

    do { 
     currentMin += inc; 
     if ((currentMin % 60) === 0 || currentMin > 60) { 
      currentMin = (currentMin === 60) ? 0 : currentMin - 60; 
      currentHr += 1; 
     } 
     current = currentHr + ':' + pad(currentMin); 
     r.push(previous + ' - ' + current); 
     previous = current; 
    } while (currentHr !== endHr); 

    return r; 
}; 

點擊此處查看示例: - http://jsfiddle.net/w6EQ6/3/

,或者如果您不想再打印的範圍內看到了如下鏈接: -

http://jsfiddle.net/w6EQ6/6/

固定的問題: http://jsfiddle.net/w6EQ6/8/

+0

真的很好的工作,但時間範圍內顯示。我們能像9:15,9:30,9:45,10:00那樣表現出來嗎? – Hushme

+0

非常感謝。這已經解決了我的問題。你是偉大的先生! – Hushme

+0

我已添加新的jsfiddle鏈接它將返回所需的輸出請檢查我的答案... –

0

問題在於您的for循環嵌套。你的代碼會發生什麼,內層循環會執行兩次。一旦xh = 9,一次xh = 10。這就是爲什麼你獲得比預期更多的時間。

一個解決將是改變

xh <= endTime 

xh < endTime 

這將導致每次上到被印刷結束時間。爲了讓它包容,我會添加另一行來將endTime添加到數組中。

因此,最終的循環可能看起來像

for (var xh = FirstTime; xh < endTime; xh++) { 
    for (var xm = 0; xm < 60; xm += timeDiff) { 
     array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2)); 
    } 
    array.push(("0" + endTime).slice(-2) + ':' + ("00").slice(-2)); 
}; 
1

你循環一個額外的,下面的代碼將解決你的問題

for (var xh = FirstTime; xh < endTime; xh++) { 
    for (var xm = 0; xm < 60; xm += timeDiff) { 
     array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2)); 
    } 
}; 
array.push(("0" + xh).slice(-2)+':' + ("00").slice(-2)); 

和更新jsfiddle

+0

謝謝你的幫助,但10:00仍然失蹤 – Hushme

2

好吧,如果你需要你讓您的循環在10:00停止,這裏是代碼

var array = new Array(); 
    var timeDiff = 15; 
    var end = 10; 
    var start = 9; 
    for (var xh = start; xh <= end; xh++) { 
     for (var xm = 0; xm < 60; xm += timeDiff) { 
      array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2)); 
      if(xh==end) 
       break; 
     } 
    }; 

現在如果要計算此兩個日期之間的區別是功能

function difference(date1,date2) 
    { 
     date1 = new Date(0,0,0,parseInt(date1.split(":")[0]),parseInt(date1.split(":")[1])); 
     date2 = new Date(0,0,0,parseInt(date2.split(":")[0]),parseInt(date2.split(":")[1])); 
     diff = (((date1>date2)?1:-1)*(date1-date2))/(1000*60*60); 
     return diff; 
    } 

您可以使用此功能,這樣

var diff = difference(array[0],array[1]); //for example 

這個函數返回小時的區別,如果您需要在幾分鐘或秒後你必須改變這樣的差異變量

// in minutes 
diff = (((date1>date2)?1:-1)*(date1-date2))/(1000*60); 
      return diff; 
// in seconds 
diff = (((date1>date2)?1:-1)*(date1-date2))/1000; 
      return diff; 

這裏是一個jsFiddle

+0

真的很好的建議兄弟。但是,這是我在尋找http://jsfiddle.net/w6EQ6/3/ – Hushme

+0

想到你想要計算差異!無論如何感謝 – Khalid

+1

它幫助我解決了我的問題 –

2

下面是使用這裏的答案之一爲9:30致力於10:30答案:

function padLeft(value, padding) { 
    return String(padding + value).slice(-padding.length); 
} 

function getTimeInterval(start, end, interval) { 
    var result = []; 

    var date = new Date(); 
    date.setHours(start.hour); 
    date.setMinutes(start.minute); 


    while (!(date.getHours() === end.hour && date.getMinutes() === end.minute + interval)) { 
     result.push(padLeft(date.getHours(), '00') + ':' + padLeft(date.getMinutes(), '00')); 
     date = new Date(date.getTime() + interval * 60 * 1000); 
    } 
    return result; 


} 
console.log(getTimeInterval({ 
    hour: 9, 
    minute: 30 
}, { 
    hour: 10, 
    minute: 30 
}, 15)); 
+1

One Work For You!大 – Hushme