JavaScript以已知间隔计算时差

时间:2015-02-09 23:30:05

标签: javascript date datetime time intervals

我正在努力计算日期时间对象:(

我们从用户那里得到三个输入:

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

谢谢!

1 个答案:

答案 0 :(得分: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" />