UNPKG

@esri/calcite-components

Version:

Web Components for Esri's Calcite Design System.

56 lines (55 loc) 1.98 kB
import { isValidNumber } from "./number"; export const maxTenthForMinuteAndSecond = 5; export function getMeridiem(hour) { if (!isValidNumber(hour)) { return null; } const hourAsNumber = parseInt(hour); return hourAsNumber >= 0 && hourAsNumber <= 11 ? "AM" : "PM"; } export function getMeridiemHour(hour) { if (!isValidNumber(hour)) { return null; } const hourAsNumber = parseInt(hour); if (hourAsNumber === 0) { return "12"; } return hourAsNumber > 12 ? formatTimePart(hourAsNumber - 12) : hour; } export function parseTimeString(value) { const timeString = formatTimeString(value); const [hour, minute, second] = timeString ? timeString.split(":") : [null, null, null]; return { hour, minute, second: second || (hour && minute ? "00" : null) }; } export function formatTimeString(value) { if (!value || value.endsWith(":") || value.startsWith(":")) { return null; } const splitValue = value.split(":"); if (splitValue.length > 1) { const [hour, minute, second] = splitValue; const hourAsNumber = parseInt(splitValue[0]); const minuteAsNumber = parseInt(splitValue[1]); const secondAsNumber = parseInt(splitValue[2]); const hourValid = isValidNumber(hour) && hourAsNumber >= 0 && hourAsNumber < 24; const minuteValid = isValidNumber(minute) && minuteAsNumber >= 0 && minuteAsNumber < 60; const secondValid = isValidNumber(second) && secondAsNumber >= 0 && secondAsNumber < 60; if ((hourValid && minuteValid && !second) || (hourValid && minuteValid && secondValid)) { let newValue = `${formatTimePart(hourAsNumber)}:${formatTimePart(minuteAsNumber)}`; if (secondValid) { newValue = `${newValue}:${formatTimePart(secondAsNumber)}`; } return newValue; } } return null; } export function formatTimePart(number) { const numberAsString = number.toString(); return number >= 0 && number <= 9 ? numberAsString.padStart(2, "0") : numberAsString; }