UNPKG

convertible-js

Version:

Convert 12-hour time string to 24-hour time and vice versa with flexible formatting.

77 lines (76 loc) 3.51 kB
"use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var custom_types_1 = require("./custom-types"); var RegexPatterns = __importStar(require("./regex-patterns")); var utils_1 = require("./utils"); exports.convertTime = function (time, options) { try { if (typeof time !== 'string') { return undefined; } // ex. 3pm var isOnlyHoursWithPeriod = RegexPatterns.ONLY_HOURS_AND_TIME_PERIOD.test(time); if (!RegexPatterns.TWELVE_HOUR_FORMAT.test(time) && !RegexPatterns.TWENTY_FOUR_HOUR_FORMAT.test(time) && !isOnlyHoursWithPeriod) { return undefined; } var hoursAndMinutesRegexPattern = !isOnlyHoursWithPeriod ? RegexPatterns.HOURS_AND_MINUTES : RegexPatterns.HOURS_WITHOUT_MINUTES; var isTwelveHourFormat = RegexPatterns.TWELVE_HOUR_FORMAT.test(time); if (isOnlyHoursWithPeriod) { // it means it's also a 12-hour format time isTwelveHourFormat = true; } var hoursAndMinutesMatches = time.match(hoursAndMinutesRegexPattern); var hoursAndMinutes = hoursAndMinutesMatches ? hoursAndMinutesMatches[0] : null; if (!hoursAndMinutes) { return undefined; } var timeSuffix = time.replace(hoursAndMinutesRegexPattern, ''); var period = time.match(RegexPatterns.AM_PM); if (period) { period = period[0]; } var hours = Number(hoursAndMinutes.split(':')[0]); var minutes = Number(hoursAndMinutes.split(':')[1]) || 0; var secondsAndMilleseconds = timeSuffix.replace(RegexPatterns.AM_PM, ''); var convertToFormat = ''; var desiredFormat = ''; if (Object.prototype.toString.call(options) === '[object Object]') { convertToFormat = (options || {}).convertTo || ''; desiredFormat = (options || {}).format || ''; } if (isTwelveHourFormat && convertToFormat !== custom_types_1.TimeFormat.twelveHour) { hours = utils_1.getHoursFrom12HoursTime(hours, period); } // if user only want to format the time without converting it, retain the given period // ex. 10:34pm => 10:34 PM var timePeriod = desiredFormat ? period : ''; if (!isTwelveHourFormat && convertToFormat !== custom_types_1.TimeFormat.twentyFourHour) { // get am/pm time period first from 24 hours before converting hours to 12-hours timePeriod = utils_1.getTimePeriodFrom24HourTime(hours); // convert 24-hour hours to 12-hours format hours = utils_1.getHoursFrom24HoursTime(hours); } if (desiredFormat) { return utils_1.customTimeFormat({ hours: hours, minutes: minutes, period: timePeriod }, desiredFormat); } else { return utils_1.defaultTimeFormat({ hours: hours, minutes: minutes, period: timePeriod, secondsAndMilleseconds: secondsAndMilleseconds }); } } catch (err) { console.log("convertTime(" + time + ", " + JSON.stringify(options) + "): " + err); return undefined; } }; exports.default = exports.convertTime;