Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
9
rated 0 times [  10] [ 1]  / answers: 1 / hits: 66359  / 8 Years ago, mon, march 21, 2016, 12:00:00

I'm trying to create an array of times (strings, not Date objects) for every X minutes throughout a full 24 hours. For example, for a 5 minute interval the array would be:



['12:00 AM', '12:05 AM', '12:10 AM', '12:15 AM', ..., '11:55 PM']


My quick and dirty solution was to use 3 nested for loops:



var times = []
, periods = ['AM', 'PM']
, hours = [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
, prop = null
, hour = null
, min = null;

for (prop in periods) {
for (hour in hours) {
for (min = 0; min < 60; min += 5) {
times.push(('0' + hours[hour]).slice(-2) + ':' + ('0' + min).slice(-2) + + periods[prop]);
}
}
}


This outputs the desired result but I'm wondering if there's a more elegant solution. Is there a way to do this that's:




  • more readable

  • less time complex


More From » arrays

 Answers
42

If the interval is only to be set in minutes[0-60], then evaluate the below solution w/o creating the date object and in single loop:





var x = 5; //minutes interval
var times = []; // time array
var tt = 0; // start time
var ap = ['AM', 'PM']; // AM-PM

//loop to increment the time and push results in array
for (var i=0;tt<24*60; i++) {
var hh = Math.floor(tt/60); // getting hours of day in 0-24 format
var mm = (tt%60); // getting minutes of the hour in 0-55 format
times[i] = (0 + (hh % 12)).slice(-2) + ':' + (0 + mm).slice(-2) + ap[Math.floor(hh/12)]; // pushing data in array in [00:00 - 12:00 AM/PM format]
tt = tt + x;
}

console.log(times);




[#62865] Friday, March 18, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
lara

Total Points: 462
Total Questions: 100
Total Answers: 102

Location: Jersey
Member since Mon, Jun 14, 2021
3 Years ago
lara questions
;