qunz666
qunz666

Reputation: 310

jQuery How to parse start and end time hour by hour

I have issues, i working with time mode, and now i have two values is:

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

So problem is, i need to parse this date by hours.

Result must be:

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

As u can see i need not standart parsing hours.

So i try to use this method:

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);

OUTPUT:

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"

But for me it's not good, plus if end date is for next date it's not calculate

Upvotes: 1

Views: 595

Answers (2)

PhilMaGeo
PhilMaGeo

Reputation: 551

Here is a solution : loop from start hour to end hour and check if we are on the first hour or end hour to do some specific code otherwise render 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);

Upvotes: 2

Vakme
Vakme

Reputation: 46

I did it like this. It still requires additional parsing, if you want to remove seconds.

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>

Upvotes: 1

Related Questions