Convert Shorthand into Full Javascript or Moment Dates

Includes: - moment.js - QUnit

by tonytlwu

HTML

<script src="http://momentjs.com/downloads/moment.min.js"></script>
<script src="http://code.jquery.com/qunit/qunit-1.16.0.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.16.0.css">
<div id="qunit"></div>
<div id="qunit-fixture"></div>

JavaScript

// https://www.codementor.io/questions/6557861799?ref=email

function get_hour_and_minute(timeString) {
    var hour = 0;
    var minute = 0;
    var afternoon = false;
    var timeSeparator = /:|a|p/;
    
    if (timeString.indexOf('p') > -1) {
        afternoon = true;
    }
    
    if ( timeString.split(timeSeparator).length > 1 ) {
        // Notation HH:MM or H:MM
        timeParts = timeString.split(timeSeparator);
        hour   = parseInt(timeParts[0], 10) + (afternoon ? 12 : 0);
        minute = parseInt(timeParts[1], 10);
    } else {

        if (parseInt(timeString, 10) > 99) {
            // Notation HMM or HHMM
            hour = parseInt( timeString.substr(0, (timeString.length > 3) ? 2 : 1), 10 ) + (afternoon ? 12 : 0);
            minute = parseInt( timeString.substr(timeString.length-2, 2) );
        } else if (parseInt(timeString, 10) < 100) {
            // Notation H or HH
            hour = parseInt(timeString, 10) + (afternoon ? 12 : 0);
            minute = 0;
        }
        
    }
            
    return (parseInt(timeString, 10) > 0) ? [hour, minute] : false;
}

function shorthand_to_datetimes(date, timeString) {
    // date is moment.js moment representing the target date
    // timeString can vary and is displayed below
    //     input 9-17 -> output [date + "09:00:00", date + "17:00:00"]
    //     input 9a-5p -> output [date + "09:00:00", date + "17:00:00"]
    //     input 11am-1pm -> output [date + "11:00:00, date + "13:00:00"]
    //     input 9:45-13:45 -> output [date + "09:45:00, date + "13:45:00"]
    //     input 9:45a-2p -> outout [date + "09:45:00, date + "14:00:00"]
    //     input 1215-235 -> output [date + "12:15:00, date + "14:35:00"]
    //     input 1030am-4pm -> output [date + "10:30:00, date + "16:00:00]
    //     input hello -> output -1
    //     input 1030am-4 -> output -1
    
    var timeStringParts = timeString.split("-");
            
    if (timeStringParts.length > 1) {
        var...