Opening Hours Test

This is a small test on how to handle opening hours. Does not yet handle timezones and ranges over two days

by mwfire

HTML

<script src="https://raw.github.com/moment/moment/develop/min/moment.min.js"></script>
<script src="https://raw.github.com/moment/moment-timezone/0.0.1/min/moment-timezone.min.js"></script>
<script src="https://raw.github.com/icambron/twix.js/master/bin/twix.js"></script>
<script>moment.tz.add({
    "zones": {
        "Africa/Abidjan": [
            "-0:16:8 - LMT 1912 -0:16:8",
            "0 - GMT"
        ],
        "Africa/Accra": [
            "-0:0:52 - LMT 1918 -0:0:52",
            "0 Ghana %s"
        ],
        "Africa/Addis_Ababa": [
            "2:34:48 - LMT 1870 2:34:48",
            "2:35:20 - ADMT 1936_4_5 2:35:20",
            "3 - EAT"
        ],
        "Africa/Algiers": [
            "0:12:12 - LMT 1891_2_15_0_1 0:12:12",
            "0:9:21 - PMT 1911_2_11 0:9:21",
            "0 Algeria WE%sT 1940_1_25_2",
            "1 Algeria CE%sT 1946_9_7 1",
            "0 - WET 1956_0_29",
            "1 - CET 1963_3_14 1",
            "0 Algeria WE%sT 1977_9_21 1",
            "1 Algeria CE%sT 1979_9_26 1",
            "0 Algeria WE%sT 1981_4",
            "1 - CET"
        ],
        "Africa/Asmara": [
            "2:35:32 - LMT 1870 2:35:32",
            "2:35:32 - AMT 1890 2:35:32",
            "2:35:20 - ADMT 1936_4_5 2:35:20",
            "3 - EAT"
        ],
        "Africa/Bamako": [
            "-0:32 - LMT 1912 -0:32",
            "0 - GMT 1934_1_26",
            "-1 - WAT 1960_5_20 -1",
            "0 - GMT"
        ],
        "Africa/Bangui": [
            "1:14:20 - LMT 1912 1:14:20",
            "1 - WAT"
        ],
        "Africa/Banjul": [
            "-1:6:36 - LMT 1912 -1:6:36",
            "-1:6:36 - BMT 1935 -1:6:36",
            "-1 - WAT 1964 -1",
            "0 - GMT"
        ],
        "Africa/Bissau": [
            "-1:2:20 - LMT 1911_4_26 -1:2:20",
            "-1 - WAT 1975 -1",
            "0 - GMT"
        ],
        "Africa/Blantyre": [
            "2:20 - LMT 1903_2 2:20",
            "2 - CAT"
        ],
       ...

JavaScript

/**
 * TIMEZONE DEPENDENT BUSINESS HOURS CHECK
 * @package Orderella Mobile App
 * @version 0.0.1
 */

var location = {
    timezone : 'Europe/Berlin',
    openingHours: {
        // 0 = Sunday, 1 = Monday...
        '0' : [{ start: '8.00', end: '12.00' }, { start: '13:00', end: '18:00'}],
        '1' : [{ start: '8.00', end: '12.00' }, { start: '13.00', end: '24.00'}],
        '2' : [{ start: '8.00', end: '12.00' }, { start: '13.00', end: '02.00'}],
        '3' : [{ start: '8.00', end: '12.00' }, { start: '13.00', end: '20.00'}],
        '4' : [{ start: '8.00', end: '12.00' }, { start: '13.00', end: '21.00'}],
        '5' : [{ start: '8.00', end: '12.00' }, { start: '13.00', end: '18.00'}],
        '6' : [{ start: '8.00', end: '12.00' }, { start: '13.00', end: '18.00'}],
    }
};

// Get opening hours surrounding today
var today          = moment().tz(location.timezone);
var tomorrow       = moment().tz(location.timezone).add('days', 1);
var yesterday      = moment().tz(location.timezone).subtract('days', 1);

// Create ranges for each day
var todayRange     = createRanges(location.openingHours[today.day()], today);
var tomorrowRange  = createRanges(location.openingHours[tomorrow.day()], tomorrow);
var yesterdayRange = createRanges(location.openingHours[yesterday.day()], yesterday);

// Combine ranges
var ranges         = yesterdayRange.concat(todayRange).concat(tomorrowRange);

// Create ranges from times and date
function createRanges(openingHours, openingDate) {
    if(!openingHours) return;
    var openingHoursCollection = [];
    
    for(var i=0, max=openingHours.length; i<max; i++) {
        var oh = openingHours[i];
        var ohStartTimes = oh.start.split('.');
        var ohEndTimes = oh.end.split('.');
        
        var rangeStart = moment(openingDate).hour(ohStartTimes[0]).minute(ohStartTimes[1]).second(0);
        var rangeEnd = moment(openingDate).hour(ohEndTimes[0]).minute(ohEndTimes[1]).second(0);
        
        // If end time is less than...