timeValue.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. 'use strict';
  2. const parseInt = globalThis.parseInt;
  3. function buildTimeValue(value) {
  4. const onlyDigitsValue = value.replace(/\D/g, '');
  5. if (onlyDigitsValue.length < 2) {
  6. return value;
  7. }
  8. const firstDigit = parseInt(onlyDigitsValue[0], 10);
  9. const secondDigit = parseInt(onlyDigitsValue[1], 10);
  10. if (firstDigit >= 3 || firstDigit === 2 && secondDigit >= 4) {
  11. let index;
  12. if (firstDigit >= 3) {
  13. index = 1;
  14. } else {
  15. index = 2;
  16. }
  17. return build(onlyDigitsValue, index);
  18. }
  19. if (value.length === 2) {
  20. return value;
  21. }
  22. return build(onlyDigitsValue, 2);
  23. }
  24. function build(onlyDigitsValue, index) {
  25. const hours = onlyDigitsValue.slice(0, index);
  26. const validHours = Math.min(parseInt(hours, 10), 23);
  27. const minuteCharacters = onlyDigitsValue.slice(index);
  28. const parsedMinutes = parseInt(minuteCharacters, 10);
  29. const validMinutes = Math.min(parsedMinutes, 59);
  30. return `${validHours.toString().padStart(2, '0')}:${validMinutes.toString().padStart(2, '0')}`;
  31. }
  32. function isValidDateOrTimeValue(element, value) {
  33. const clone = element.cloneNode();
  34. clone.value = value;
  35. return clone.value === value;
  36. }
  37. exports.buildTimeValue = buildTimeValue;
  38. exports.isValidDateOrTimeValue = isValidDateOrTimeValue;