2015-02-09 58 views
0

我有日期時間計算掙扎對象:(已知間隔的JavaScript計算時間差

我們從用戶獲得三個輸入:

1. Start time of day 
2. End time of day 
3. Intervals between events (in minutes) 

我的目標的目標是計算從選定的時間間隔開始時間到結束時間每天有多少事件,並創建一個具有這些事件的確切時間的數組。

到目前爲止,我以這種方式獲取數據:

StartTime是一個Datetime對象。 EndTime是一個Datetime對象。

//Get start time  
var HourOfStart = StartTime.getHours(); 
var MinuteOfStart = StartTime.getMinutes(); 

//Get end time  
var HourOfEnd = EndTime.getHours(); 
var MinuteOfEnd = EndTime.getMinutes(); 

計算多少事件的差別在一個小時,試圖蓋住第一個和最後的事件之後,我意識到我必須做一些錯誤的(數學不是我的強項)。同樣轉換爲unix時間戳讓我感到莫名其妙,因爲事件不是在一個小時內開始。

所以,簡而言之,如果用戶輸入:

Start time: 10:15 
End time: 12:30 
Interval: 15 minutes 

我需要的事件倍以下數組: 10:30,10:45,11:00,11:15,11:30,11:45,12:00,12:15

謝謝!

+2

不要試圖做算術用小時和分鐘。使用'getTime'獲取毫秒的全部時間。然後除以間隔中的毫秒數。 – Barmar 2015-02-09 23:36:06

+0

@Barmer說什麼 – bhspencer 2015-02-09 23:48:12

+0

@Barmar該死的我很笨,一定是長時間的。我將它寫出來併發布在這裏以備將來的搖擺頭:) – BenNov 2015-02-09 23:51:12

回答

1

這是一個應該做你想做的功能。正如評論中所建議的那樣,只需計算以毫秒爲單位的時間並增加,直到達到停止時間。

function calculate() { 
 
    var a = []; 
 
    var startValue = document.getElementById("startTime").value; 
 
    var endValue = document.getElementById("endTime").value; 
 
    var intervalValue = document.getElementById("interval").value; 
 
    var startDate = new Date("1/1/2015 " + startValue); 
 
    var endDate = new Date("1/1/2015 " + endValue); 
 
    var offset = intervalValue * 1000 * 60; 
 
    do { 
 
    startDate = new Date(startDate.getTime() + offset); 
 
    if (startDate < endDate) 
 
     a.push(startDate); 
 
    } while(startDate < endDate); 
 
    console.log(a); 
 
}
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script> 
 
<label for="startTime">Start Time</label> 
 
<input id="startTime" value="10:15" /> 
 
<br/> 
 
<label for="endTime">End Time</label> 
 
<input id="endTime" value="12:30" /> 
 
<br/> 
 
<label for="interval">Interval</label> 
 
<input id="interval" value="15" /> 
 
<br/> 
 
<input type="button" onclick="calculate()" value="Calculate" />