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...