jQuery如何按小时解析开始和结束时间

时间:2019-05-22 12:38:47

标签: javascript jquery

我遇到了问题,我正在使用时间模式,现在我有两个值是:

var startTime = "05:45:00 22/05/19"
var endTime = "14:45:00 22/05/19"

问题是,我需要按小时来解析此日期。

结果必须为:

05:45 - 06:00
06:00 - 07:00
07:00 - 08:00
08:00 - 09:00
09:00 - 10:00
10:00 - 11:00
11:00 - 12:00
12:00 - 13:00
13:00 - 14:00
14:00 - 14:45

您可以看到我不需要标准的解析时间。

所以我尝试使用这种方法:

function addMinutes(time, minutes) {
    var date = new Date(new Date('01/01/2015 ' + time).getTime() + minutes * 60000);
    var tempTime = ((date.getHours().toString().length == 1) ? '0' + date.getHours() : date.getHours()) + ':' +
        ((date.getMinutes().toString().length == 1) ? '0' + date.getMinutes() : date.getMinutes()) + ':' +
        ((date.getSeconds().toString().length == 1) ? '0' + date.getSeconds() : date.getSeconds());
    return tempTime;
}

var starttime = "05:45:00";
var interval = "60";
var endtime = "14:45:00";
var timeslots = [starttime];


while (starttime != endtime) {

    starttime = addMinutes(starttime, interval);
    timeslots.push(starttime);

}
console.log(timeslots);

输出:

0: "05:45:00"
1: "06:45:00"
2: "07:45:00"
3: "08:45:00"
4: "09:45:00"
5: "10:45:00"
6: "11:45:00"
7: "12:45:00"
8: "13:45:00"
9: "14:45:00"

但是对我来说,这不好,再加上结束日期是下一个日期,则无法计算

2 个答案:

答案 0 :(得分:2)

这是一个解决方案: 从开始时间到结束时间循环播放,并检查我们是在第一个小时还是结束时间做一些特定的代码,否则渲染startHour-startHour +1

	var startTime = "15:00"
	var endTime = "00:15"
	var timeslots = [];
	
	
	var startOffset = parseInt(startTime.substring(0,2));
	var endOffset =  parseInt(endTime.substring(0,2));
	
	if(endOffset < startOffset){
		endOffset+= 24;
	}
	
	for(var i = startOffset;i<=endOffset;i++){
		var begin,end;
		var currentOffset = i < 24 ? i : i - 24;
		if(i==startOffset){
			begin = startTime;
		}else{
			begin = currentOffset < 10 ? "0" + currentOffset +":00" : currentOffset +":00" ;
		}
		if(i==endOffset){
			end = endTime;
		}else{
			
			end = currentOffset < 9 ? "0" + (currentOffset+1) +":00" :(currentOffset+1) +":00";
		}
		timeslots.push(begin + " : " + end);
	}
	console.log(timeslots);

答案 1 :(得分:1)

我是这样做的。如果要删除秒,它仍然需要额外的解析。

function timestringToDate(time) {
  var temptime = new Date();
  var splittedtime = time.split(':');
  temptime.setHours(splittedtime[0], splittedtime[1], 0);
  return temptime;
}

var starttime = "05:45:00";
var endtime = "14:45:00";

var starttimeobj = timestringToDate(starttime);
var endtimeobj = timestringToDate(endtime);

var slotarray = [];

var slotstart, slotend;

for(var t = starttimeobj; t.getHours() < endtimeobj.getHours(); ) {
  slotstart = t.toLocaleTimeString('en-US', { hour12: false });
  t.setHours(t.getHours()+1);
  if(t.getMinutes !== 0)
    t.setMinutes(0);
  slotend = t.toLocaleTimeString('en-US', { hour12: false });
  slotarray.push(slotstart  + ' - ' + slotend);
}

slotarray.push(slotend  + ' - ' + endtimeobj.toLocaleTimeString('en-US', { hour12: false })); /* I add last hour */

console.log(slotarray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>