UNPKG

time-number

Version:

Converts time representation from string to number or from number to string

197 lines (146 loc) 4.58 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.timeFromInt = timeFromInt; exports.timeToInt = timeToInt; function isOwnException(ex) { return ex.message.substring(0, 11) === 'time-number'; } function leftPadding(value) { var len = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; var sValue = value.toString(); var lLen = len - sValue.length; var l = ''; while (l.length < lLen) { l += '0'; } return '' + l + sValue; } function internalTimeFromInt(val, _ref) { var validate = _ref.validate, format = _ref.format, leadingZero = _ref.leadingZero; var value = parseInt(val, 10); if (validate && (value < 0 || value >= 24 * 3600)) { throw new RangeError('time-number, timeFromInt(): rangeError, value supposed to be between 0 and 86399'); } var hours = Math.floor(value / 3600); var minutes = Math.floor((value - hours * 3600) / 60); var seconds = value - hours * 3600 - minutes * 60; var ampm = null; if (format === 12 || format === '12') { ampm = hours < 12 ? 'AM' : 'PM'; if (hours === 0) { hours = 12; } else if (hours > 12) { hours -= 12; } } var ret = [leadingZero ? leftPadding(hours) : hours, leftPadding(minutes)]; if (seconds) { ret.push(leftPadding(seconds)); } var timeString = ret.join(':'); if (ampm) { return timeString + ' ' + ampm; } return timeString; } function compatv1(params) { if (typeof params === 'boolean') { return { validate: params }; } return params; } function timeFromInt(val) { var providedParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var defaults = { validate: true, format: 24, leadingZero: true }; var params = Object.assign({}, defaults, compatv1(providedParams)); var validate = params.validate; if (!validate) { return internalTimeFromInt(val, params); } try { if (val - parseFloat(val, 10) + 1 >= 0) { return internalTimeFromInt(val, params); } throw new Error(); } catch (ex) { if (isOwnException(ex)) { throw ex; } throw new Error('time-number, timeFromInt(): invalud value: \'' + val + '\', supposed to be number'); } } function internalTimeToInt(val, _ref2) { var validate = _ref2.validate; var times = val.split(':'); var len = times.length; while (times.length < 3) { times.push('0'); } var iTimes = times.map(function (i) { return parseInt(i, 10); }); if (validate) { var hours = iTimes[0]; if (hours < 0 || hours > 23) { throw new RangeError('time-number, timeToInt(): hours must be between 0 and 23, provided value: \'' + val + '\''); } if (len > 1) { var minutes = iTimes[1]; if (minutes < 0 || minutes > 59) { throw new RangeError('time-number, timeToInt(): minutes must be between 0 and 59, provided value: \'' + val + '\''); } } if (len > 2) { var seconds = iTimes[2]; if (seconds < 0 || seconds > 59) { throw new RangeError('time-number, timeToInt(): seconds must be between 0 and 59, provided value: \'' + val + '\''); } } } return iTimes[0] * 3600 + iTimes[1] * 60 + iTimes[2]; } function internal12To24(val) { if (!val || !val.match) { return val; } if (!val.match(/(am|pm)$/i)) { return val; } if (val.match(/^0+:/)) { throw new Error('12h format can\'t have 00:30 AM, it should be 12:30 AM instead'); } if (val.match(/am$/i)) { return val.replace(/^(\d+)/, function (m) { return m === '12' ? '0' : m; }).replace(/\s*am$/i, ''); } return val.replace(/^(\d+)/, function (m) { return m === '12' ? m : (parseInt(m, 10) + 12).toString(); }).replace(/\s*pm$/i, ''); } function timeToInt(value) { var providedParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var defaults = { validate: true }; var params = Object.assign({}, defaults, compatv1(providedParams)); var validate = params.validate; if (!validate) { var val = internal12To24(value); return internalTimeToInt(val, params); } try { var _val = internal12To24(value); if (!_val.match(/^\d+(:\d+(:\d+)?)?$/)) { throw new Error(); } return internalTimeToInt(_val, params); } catch (ex) { if (isOwnException(ex)) { throw ex; } throw new Error('time-number, timeToInt(): supported formats are \'HH\', \'HH:mm\', \'HH:mm:ss\', provided value: \'' + value + '\' doesn\'t match any of them'); } }