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
JavaScript
;
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;