Мне нужно создать массив элементов в javascript, которые добавляют 2 часа к определенному времени, которое я установил. Я привожу пример. Время

14:00.

Мне нужно создать массив, содержащий все 30-минутные интервалы до 16:00.
Бывший

14:00
14:30
15:00
15:30
0
PeraDev 19 Янв 2022 в 18:15
Красиво, а что ты пытаешься сделать? Какие исследования вы провели?
 – 
Jeremy Thille
19 Янв 2022 в 18:37
Прочтите Как спросить и минимально воспроизводимый пример. Мы исправляем код, который вы честно пытались исправить сами — мы не пишем его для вас.
 – 
zer00ne
19 Янв 2022 в 18:59

3 ответа

Я бы создал два метода: addTime и createDateArray.

В функции addTime мы используем для преобразования метки времени в объект Date, чтобы вам было проще управлять, а не в строку 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);

Вы также можете использовать функцию addTime для других свойств, таких как часы и секунды, если хотите, установив второй и последний аргумент метода.

Я надеюсь, что приведенный выше код имеет смысл, и вы можете его использовать.

0
gugateider 19 Янв 2022 в 18:44

Вот функция, которая выводит спецификации времени в виде строк. Может потребоваться необязательный второй аргумент, чтобы указать время окончания (16:00 в вашем вопросе).

Две служебные функции преобразуют строку времени в минуты (и обратно).

Наконец, массив результатов создается с помощью 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"));
0
trincot 19 Янв 2022 в 19:02

Вы можете создать базовую функцию следующим образом:

   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$&"));
};

И используйте с:

getTimes("14:00");
0
PeraDev 19 Янв 2022 в 19:06