Skip to content

Instantly share code, notes, and snippets.

@brolnickij
Last active June 17, 2020 14:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save brolnickij/6f88c57414556ccc25c2e2b99366c3d8 to your computer and use it in GitHub Desktop.
Save brolnickij/6f88c57414556ccc25c2e2b99366c3d8 to your computer and use it in GitHub Desktop.
Interval generator
// TIME_INTERVAL - это те самые интервалы между временем.
// START_TIME - "00:00"
// END_TIME - "23:00"
function getTimesInterval(TIME_INTERVAL, START_TIME, END_TIME) {
const INT_START_TIME = convert24ToInt(START_TIME, 'START')
const INT_END_TIME = convert24ToInt(END_TIME, 'END')
const INT_STEP = TIME_INTERVAL * 100 / 60
const TIMES_RAGE = generateRange(INT_START_TIME, INT_END_TIME, INT_STEP).map(convertIntTo24)
function convert24ToInt(TIME, TYPE) {
let [hours, minutes] = splitTime(TIME)
if (TYPE === 'END') {
if (hours === '00') {
hours = 24.01
}
}
return (hours * 100) + (minutes * 100.0 / 60)
}
function splitTime(TIME) {
return TIME.split(':')
}
function convertIntTo24(TIME) {
function leftPad(NUMBER) {
return (NUMBER < 10) ? ('0' + NUMBER) : NUMBER
}
let hours = Math.round(parseInt(TIME / 100, 10))
let minutes = Math.round((TIME % 100) * 60 / 100)
if (hours === 24) {
hours = 0
}
return `${leftPad(hours)}:${leftPad(minutes)}`
}
function generateRange(START, STOP, STEP) {
const OUTPUT = [START]
let temp = START
while(temp < STOP) {
temp += STEP
OUTPUT.push(temp)
}
return OUTPUT
}
function generateTimeInterval(TIME_RANGE) {
const TIME_RANGE_LENGTH = TIME_RANGE.length - 1
return TIME_RANGE.reduce((ACCUMULATOR, ITEM, INDEX) => {
const CURRENT_TIMESTAMP = ITEM
const NEXT_TIMESTAMP = TIME_RANGE[INDEX + 1]
if (NEXT_TIMESTAMP === undefined) {
return ACCUMULATOR
}
if (TIME_RANGE_LENGTH === INDEX + 1 && NEXT_TIMESTAMP > END_TIME) {
return ACCUMULATOR
}
const [FROM_HOUR, FROM_MINUTE] = splitTime(CURRENT_TIMESTAMP)
const [TO_HOUR, TO_MINUTE] = splitTime(NEXT_TIMESTAMP)
ACCUMULATOR.push({
fullIntervalTime: `${CURRENT_TIMESTAMP}-${NEXT_TIMESTAMP}`,
from: {
hour: FROM_HOUR,
minute: FROM_MINUTE
},
to: {
hour: TO_HOUR,
minute: TO_MINUTE
}
})
return ACCUMULATOR
}, [])
}
return generateTimeInterval(TIMES_RAGE)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment