You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.1 KiB
44 lines
1.1 KiB
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.buildTimeValue = buildTimeValue; |
|
|
|
function buildTimeValue(value) { |
|
const onlyDigitsValue = value.replace(/\D/g, ''); |
|
|
|
if (onlyDigitsValue.length < 2) { |
|
return value; |
|
} |
|
|
|
const firstDigit = parseInt(onlyDigitsValue[0], 10); |
|
const secondDigit = parseInt(onlyDigitsValue[1], 10); |
|
|
|
if (firstDigit >= 3 || firstDigit === 2 && secondDigit >= 4) { |
|
let index; |
|
|
|
if (firstDigit >= 3) { |
|
index = 1; |
|
} else { |
|
index = 2; |
|
} |
|
|
|
return build(onlyDigitsValue, index); |
|
} |
|
|
|
if (value.length === 2) { |
|
return value; |
|
} |
|
|
|
return build(onlyDigitsValue, 2); |
|
} |
|
|
|
function build(onlyDigitsValue, index) { |
|
const hours = onlyDigitsValue.slice(0, index); |
|
const validHours = Math.min(parseInt(hours, 10), 23); |
|
const minuteCharacters = onlyDigitsValue.slice(index); |
|
const parsedMinutes = parseInt(minuteCharacters, 10); |
|
const validMinutes = Math.min(parsedMinutes, 59); |
|
return `${validHours.toString().padStart(2, '0')}:${validMinutes.toString().padStart(2, '0')}`; |
|
} |