Time Parsing and formatting

Time Parsing and formatting

by Terrance Smith

HTML

<form>
    <h3>Test Driver</h3>
    <input type="button" id="tester" value="Run Unit Tests" onclick="start_tests();">
    <h3>Format Selector</h3>
    <select id="formatval" >
        <option value="hh am|pm">hh am|pm</option>
        <option value="hh:mm am|pm">hh:mm am|pm</option>
        <option value="hh:mm:ss am|pm">hh:mm:ss am|pm</option>
    </select>
    <h3>Input text</h3>
    <input type="text" value="12:51 am" id="in"/>
    <h3>Formatted output text</h3>
    <input type="text" value="_" id="out"/>
    <input type="button" onclick="parseEntry();" value="  format  " id="formatter"/>
</form>

JavaScript

function parseTime(timeString) {
    if (timeString === '') {
        return null;
    }
    var d = new Date();
    var time = timeString.match(/(\d+)(:(\d\d))?\s*(p?)/i);

    d.setHours(parseInt(time[1], 10) + ((parseInt(time[1], 10) < 12 && time[4]) ? 12 : 0));
    d.setMinutes(parseInt(time[3], 10) || 0);
    d.setSeconds(0, 0);
    return d;
}

function isDateObject(val) {
    return (val.getMonth);
}

function getClockTimeString(inputDate) {

    if (!isDateObject(inputDate)) {
        throw "Argument is not typeof Date";
    }
    var hour = inputDate.getHours();
    var minute = inputDate.getMinutes();
    var second = inputDate.getSeconds();
    var ap = "AM";

    if (hour > 11) {
        ap = "PM";
    }
    if (hour > 12) {
        hour = hour - 12;
    }
    if (hour === 0) {
        hour = 12;
    }
    if (hour < 10) {
        hour = "0" + hour;
    }
    if (minute < 10) {
        minute = "0" + minute;
    }
    if (second < 10) {
        second = "0" + second;
    }

    var timeString = hour + ':' + minute + ':' + second + " " + ap;

    if (arguments[1]) {
        var formatter = arguments[1].toString();
        if (formatter && timeString) {
            switch (formatter) {
            case "hh am|pm":
                timeString = hour + " " + ap;
                break;
            case "hh:mm am|pm":
                timeString = hour + ":" + minute + " " + ap;
                break;
            case "hh:mm:ss am|pm":
                timeString = hour + ":" + minute + ":" + second + " " + ap;
                break;
            }
        }
    }
    return timeString;
}


function PadTime(input) {
    //optional boolean arg show seconds
    var Hour = "(1[012]|0?[1-9]){1}";

    var MinutesOrSecondsBeforeAmOrPm = "(([0-5][0-9]|[1-5][0-9]?:){1})(?=\\s*(am|pm|AM|PM){1})";
    var Minute = "([0-5][0-9]|[1-5][0-9]){1}";
    var Second = "([0-5][0-9]|[1-5][0-9]){1}";
    var AmOrPm = "(am|pm|AM|PM){1}";
    var Start = "^";
    var Space = "\\s";
...