Reputation: 310
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
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
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