Necesito crear una matriz de elementos en javascript, que agregan 2 horas a un tiempo determinado que configuré. Doy un ejemplo. La hora es
14:00. Necesito crear una matriz que contenga todos los intervalos de 30 minutos hasta las 16:00.
Ex
14:00 14:30 15:00 15:30Lo que haría sería crear dos métodos: addTime y createDateArray .
En la función addTime , usamos para convertir una marca de tiempo en un objeto de Date para que sea más fácil de administrar en lugar de una cadena de 14:00 .
const addTime = (_dateTimestamp, addHours, addMinutes, addSeconds) => { const date = new Date(); date.setTime( _dateTimestamp ); const newDate = new Date(); if(addHours) newDate.setHours( date.getHours() + addHours ); if(addMinutes) newDate.setMinutes( date.getMinutes() + addMinutes ); if(addSeconds) newDate.setSeconds( date.getSeconds() + addSeconds ); return newDate; } const createDateArray = (date, minuteInterval, amount) => { let array = []; for(let i = 1; i <= amount; i++) { const time = addTime( date, 0, minuteInterval * i, 0); array.push( time ); } return array; } const dateToIncrement = new Date().getTime(); const minutesInterval = 30; // every 30 minutes const amountTimes = 10; // will run through 10 times, so it'll calculate the minutes 10 times const result = createDateArray( dateToIncrement, minutesInterval, amountTimes ); console.log(result); También puede usar la función addTime para otras propiedades como horas y segundos si lo desea configurando el segundo y último argumento del método.
Espero que el código anterior tenga sentido y puedas usarlo.
Aquí hay una función que produce las especificaciones de tiempo como cadenas. Puede tomar un segundo argumento opcional para especificar la hora de finalización (16:00 en su pregunta).
Dos funciones de utilidad convierten una cadena de tiempo a (y desde) una cantidad de minutos.
Finalmente, la matriz de resultados se crea con Array.from :
const toMinutes = str => str.split(":").reduce((h, m) => h * 60 + +m); const toString = min => (Math.floor(min / 60) + ":" + (min % 60)) .replace(/\b\d\b/, "0$&"); function slots(startStr, endStr="16:00") { let start = toMinutes(startStr); let end = toMinutes(endStr); return Array.from({length: Math.floor((end - start) / 30) + 1}, (_, i) => toString(start + i * 30) ); } console.log(slots("14:00"));Puedes crear una función básica como esta:
function getTimes(start) { start = parseInt(start) * 2 + (+start.slice(-2) > 0); end = start+60/12; return Array.from({length: end - start}, (_, i) => (((i + start) >> 1) + ":" + ((i + start)%2*3) + "0").replace(/^\d:/, "0$&")); }; Y usar con:
getTimes("14:00");