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:
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With