Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
opening-hours
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
regionalkauf
opening-hours
Commits
7d0288bd
Commit
7d0288bd
authored
Jun 26, 2014
by
Johannes Bill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bugfixing
parent
c6d7dd88
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
125 additions
and
64 deletions
+125
-64
holidays.js
holidays.js
+1
-1
jsonInput.js
jsonInput.js
+82
-39
test.js
test.js
+1
-1
testHof.json
testData/testHof.json
+19
-1
timeUtils.js
timeUtils.js
+22
-22
No files found.
holidays.js
View file @
7d0288bd
...
...
@@ -43,7 +43,7 @@ function Holidays(year) {
};
function
getEasterSunday
()
{
return
new
Date
(
2014
,
3
,
5
);
return
new
Date
(
2014
,
3
,
20
);
}
function
getFixedHolidays
(
fixedHolidays
,
object
)
{
...
...
jsonInput.js
View file @
7d0288bd
...
...
@@ -6,9 +6,10 @@ var holidaysGetter = new Holidays(now.getFullYear());
var
includeString
=
"810a6deb-46f2-4fa8-b779-bb5c2a6b5577"
;
var
excludeString
=
"bb74c170-b06f-4d2b-ab88-2f6bf9ce8068"
;
var
_epochStart
=
new
Date
();
_epochStart
.
setDate
(
_epochStart
.
getDate
()
-
14
);
var
_epochEnd
=
new
Date
(
_epochStart
.
getTime
()
+
60
*
24
*
3600000
);
//var _epochStart = new Date(2014, 3, 0);
var
_epochStart
=
new
Date
(
2014
,
4
,
20
);
//_epochStart.setDate(_epochStart.getDate() - 30);
var
_epochEnd
=
new
Date
(
_epochStart
.
getTime
()
+
90
*
24
*
3600000
);
var
epocheSpan
=
[
_epochStart
,
_epochEnd
];
...
...
@@ -16,12 +17,36 @@ function calculateOpeningHours(json) {
var
jsonIncl
=
json
[
includeString
];
var
jsonExcl
=
json
[
excludeString
];
var
resultIncl
=
[];
var
resultExcl
=
[];
var
holidayIncl
=
[];
var
data
,
option
,
key
;
for
(
key
in
jsonIncl
)
{
data
=
jsonIncl
[
key
];
option
=
getOption
(
data
);
if
(
option
==
"holiday"
)
holidayIncl
=
holidayIncl
.
concat
(
getHolidays
(
data
));
else
if
(
option
==
"vacation"
)
{
resultExcl
.
push
(
getOpeningHours
(
data
,
option
));
}
else
resultIncl
.
push
(
getOpeningHours
(
data
,
option
));
}
for
(
key
in
jsonExcl
)
{
data
=
jsonExcl
[
key
];
option
=
getOption
(
data
);
resultExcl
.
push
(
getOpeningHours
(
data
,
option
));
}
resultExcl
=
tmUtils
.
orOperator
(
resultExcl
);
var
resultIncl
=
getIntervals
(
jsonIncl
);
var
resultExcl
=
getIntervals
(
jsonExcl
);
var
allHolidays
=
getAllHolidays
();
resultIncl
=
tmUtils
.
orOperator
(
resultIncl
);
resultIncl
=
tmUtils
.
andNotOperator
(
resultIncl
,
allHolidays
);
resultIncl
=
tmUtils
.
orOperator
([
resultIncl
,
holidayIncl
]);
var
result
=
tmUtils
.
andNotOperator
(
resultIncl
,
resultExcl
);
console
.
log
(
result
);
return
tmUtils
.
andNotOperator
(
resultIncl
,
resultExcl
);
}
...
...
@@ -32,11 +57,6 @@ function getIntervals(json) {
var
x
=
getOpeningHours
(
json
[
key
]);
if
(
x
)
result
.
push
(
x
);
else
{
x
=
getHolidays
(
json
[
key
]);
if
(
x
)
holidays
.
push
(
x
);
}
}
return
tmUtils
.
orOperator
(
result
);
}
...
...
@@ -88,13 +108,22 @@ function getHolidays(data) {
}
var
timeSpan
=
getTimeSpan
(
data
);
var
holidayId
=
data
[
"holidayoption"
][
0
];
var
holidayId
=
data
[
"holidayoption"
][
0
];
var
days
=
holidaysGetter
.
getHoliday
(
holidayId
);
var
intervals
=
days
.
map
(
function
(
date
)
{
return
tmUtils
.
singleDay
(
date
,
timeSpan
);
});
tmUtils
.
sort
(
intervals
);
return
intervals
;
}
function
getAllHolidays
()
{
var
days
=
holidaysGetter
.
getHoliday
(
0
);
var
intervals
=
days
.
map
(
function
(
date
)
{
return
tmUtils
.
singleDay
(
date
);
});
tmUtils
.
sort
(
intervals
);
return
intervals
;
}
...
...
@@ -112,49 +141,63 @@ function getOption(data) {
return
data
[
"option"
][
0
];
}
function
getOpeningHours
(
data
)
{
var
option
=
getOption
(
data
);
var
daySpan
=
getDaySpan
(
data
);
var
dateSpan
=
getDateSpan
(
data
);
var
timeSpan
=
getTimeSpan
(
data
);
function
getOpeningHours
(
data
,
option
)
{
option
=
option
||
getOption
(
data
);
switch
(
option
)
{
case
"default"
:
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
epocheSpan
,
7
);
return
getOpeningHoursDefault
(
data
);
case
"season"
:
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
7
);
return
getOpeningHoursSeason
(
data
);
case
"repeatable"
:
var
repeatOption
=
parseInt
(
data
[
"repeatoption"
][
"0"
]);
var
noInMonth
;
if
(
repeatOption
<=
4
)
noInMonth
=
repeatOption
;
else
if
(
repeatOption
==
30
)
noInMonth
=
-
1
;
if
(
noInMonth
)
return
tmUtils
.
cyclicFromTillDay
(
daySpan
,
noInMonth
,
timeSpan
,
dateSpan
,
epocheSpan
);
switch
(
repeatOption
)
{
case
14
:
case
21
:
case
28
:
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
repeatOption
);
default
:
console
.
error
(
"invalid repeatoption"
);
}
return
getOpeningHoursRepeatable
(
data
);
case
"vacation"
:
return
getOpeningHoursVacation
(
data
);
default
:
console
.
error
(
"no propper option found"
);
return
[];
}
}
function
getOpeningHoursDefault
(
data
)
{
var
daySpan
=
getDaySpan
(
data
);
var
timeSpan
=
getTimeSpan
(
data
);
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
epocheSpan
,
7
);
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
epocheSpan
,
epocheSpan
,
7
);
}
function
getOpeningHoursSeason
(
data
)
{
var
daySpan
=
getDaySpan
(
data
);
var
timeSpan
=
getTimeSpan
(
data
);
var
dateSpan
=
getDateSpan
(
data
);
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
epocheSpan
,
7
);
}
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
7
);
function
getOpeningHoursVacation
(
data
)
{
var
dateSpan
=
getDateSpan
(
data
);
return
tmUtils
.
dateSpan
(
dateSpan
);
}
function
getOpeningHoursRepeatable
(
data
)
{
var
daySpan
=
getDaySpan
(
data
);
var
timeSpan
=
getTimeSpan
(
data
);
var
dateSpan
=
getDateSpan
(
data
);
var
repeatOption
=
parseInt
(
data
[
"repeatoption"
][
"0"
]);
var
noInMonth
;
if
(
repeatOption
<=
4
)
noInMonth
=
repeatOption
;
else
if
(
repeatOption
==
30
)
noInMonth
=
-
1
;
if
(
noInMonth
)
return
tmUtils
.
cyclicFromTillDay
(
daySpan
,
noInMonth
,
timeSpan
,
dateSpan
,
epocheSpan
);
else
{
switch
(
repeatOption
)
{
case
14
:
case
21
:
case
28
:
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
epocheSpan
,
repeatOption
);
default
:
console
.
error
(
"invalid repeatoption"
);
}
}
}
calculateOpeningHours
(
require
(
'./testData/testHof.json'
));
\ No newline at end of file
console
.
log
(
calculateOpeningHours
(
require
(
'./testData/testHof.json'
)));
\ No newline at end of file
test.js
View file @
7d0288bd
...
...
@@ -26,7 +26,7 @@ t2 = tmUtils.standardFromTillDay([4,4], [{h: 0, m: 0}, {h: 18, m: 0}], [_epochSt
console
.
log
(
t1
);
console
.
log
(
t2
);
var
singleDay
=
tmUtils
.
singleDay
(
new
Date
())
;
var
singleDay
=
[
tmUtils
.
singleDay
(
new
Date
())]
;
console
.
log
(
singleDay
);
var
t
=
tmUtils
.
orOperator
([
t1
,
t2
,
singleDay
]);
console
.
log
(
t
);
...
...
testData/testHof.json
View file @
7d0288bd
...
...
@@ -160,6 +160,24 @@
},
"bb74c170-b06f-4d2b-ab88-2f6bf9ce8068"
:
{
"0"
:
{
"option"
:
{
"0"
:
"vacation"
},
"dayoption"
:
{
"0"
:
""
},
"repeatoption"
:
{
"0"
:
"3"
},
"holidayoption"
:
{
"0"
:
""
},
"opening_day_from"
:
"27.05"
,
"opening_day_to"
:
"04.06"
,
"opening_from"
:
""
,
"opening_to"
:
""
},
"1"
:
{
"option"
:
{
"0"
:
"default"
},
...
...
@@ -175,7 +193,7 @@
"opening_day_from"
:
"01.01"
,
"opening_day_to"
:
""
,
"opening_from"
:
"10:00"
,
"opening_to"
:
"1
4
:30"
"opening_to"
:
"1
2
:30"
}
},
"7ac7d682-2862-443b-83bd-8a3cf837ad8e"
:
{
...
...
timeUtils.js
View file @
7d0288bd
...
...
@@ -23,20 +23,20 @@ function _cyclicInterval(from, until, interval, epochStart, epochEnd) {
return
resultArray
;
}
function
_standard
(
day
,
timeFrom
,
timeUntil
,
epochStart
,
epochEnd
,
distanceDays
)
{
var
dayDiff
=
day
-
epochStart
.
getDay
();
function
_standard
(
day
,
timeFrom
,
timeUntil
,
startDate
,
endDate
,
distanceDays
)
{
var
dayDiff
=
day
-
startDate
.
getDay
();
if
(
dayDiff
<
0
)
dayDiff
+=
7
;
var
startDate
=
new
Date
(
epochStart
.
getFullYear
(),
epochStart
.
getMonth
(),
epochStart
.
getDate
()
+
dayDiff
,
timeFrom
.
h
,
timeFrom
.
m
);
var
endDate
=
new
Date
(
epochStart
.
getFullYear
(),
epochStart
.
getMonth
(),
epochStart
.
getDate
()
+
dayDiff
,
timeUntil
.
h
,
timeUntil
.
m
);
var
date0
=
new
Date
(
startDate
.
getFullYear
(),
startDate
.
getMonth
(),
startDate
.
getDate
()
+
dayDiff
,
timeFrom
.
h
,
timeFrom
.
m
);
var
date1
=
new
Date
(
startDate
.
getFullYear
(),
startDate
.
getMonth
(),
startDate
.
getDate
()
+
dayDiff
,
timeUntil
.
h
,
timeUntil
.
m
);
return
_cyclicInterval
(
startDate
,
endDate
,
distanceDays
*
24
*
3600000
,
epochStart
,
epochEnd
);
return
_cyclicInterval
(
date0
,
date1
,
distanceDays
*
24
*
3600000
,
startDate
,
endDate
);
}
function
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
daysDistance
)
{
function
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
epochSpan
,
daysDistance
)
{
timeSpan
=
transformTimeSpan
(
timeSpan
);
var
dayFrom
=
daySpan
[
0
];
var
dayTill
=
daySpan
[
1
];
...
...
@@ -58,8 +58,8 @@ function standardFromTillDay(daySpan, timeSpan, dateSpan, daysDistance) {
result
.
push
([
start
,
end
]);
}
}
result
=
sortDateIntervals
(
result
);
result
=
sort
(
result
);
result
=
andOperator
(
result
,
[
epochSpan
]
);
return
result
;
}
...
...
@@ -137,7 +137,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
return
result
;
}
function
_cyclicFromTillDayOld
(
dayFrom
,
dayTill
,
noInMonth
,
timeFrom
,
timeUntil
,
epochStart
,
epochEnd
)
{
/*
function _cyclicFromTillDayOld(dayFrom, dayTill, noInMonth, timeFrom, timeUntil, epochStart, epochEnd) {
var firstDays = cyclic(dayFrom, noInMonth, timeFrom, timeUntil, epochStart, epochEnd);
var result = firstDays.slice();
...
...
@@ -151,9 +151,9 @@ function _cyclicFromTillDayOld(dayFrom, dayTill, noInMonth, timeFrom, timeUntil,
result.push([start, end]);
}
}
sort
DateIntervals
(
result
);
sort(result);
return result;
}
}
*/
function
_getNextNoInMonthOccurence
(
day
,
startDate
,
noInMonth
)
{
startDate
=
new
Date
(
startDate
);
...
...
@@ -203,16 +203,14 @@ function singleDay(date, timeSpan) {
endDate
=
new
Date
(
date
.
getFullYear
(),
date
.
getMonth
(),
date
.
getDate
()
+
1
);
}
return
[
[
startDate
,
endDate
]
];
return
[
startDate
,
endDate
];
}
function
dateSpan
(
dateSpan
)
{
var
d0
=
dateSpan
[
0
];
var
d1
=
dateSpan
[
1
];
var
startDate
=
new
Date
(
d0
.
getFullYear
(),
d0
.
getMonth
(),
d0
.
getDa
y
());
var
endDate
=
new
Date
(
d1
.
getFullYear
(),
d1
.
getMonth
(),
d1
.
getDa
y
()
+
1
);
var
startDate
=
new
Date
(
d0
.
getFullYear
(),
d0
.
getMonth
(),
d0
.
getDa
te
());
var
endDate
=
new
Date
(
d1
.
getFullYear
(),
d1
.
getMonth
(),
d1
.
getDa
te
()
);
return
[
[
startDate
,
endDate
]
];
...
...
@@ -223,12 +221,12 @@ function orOperator(intervals) {
for
(
var
i
=
0
;
i
<
intervals
.
length
;
i
++
)
{
result
=
result
.
concat
(
intervals
[
i
]);
}
sort
DateIntervals
(
result
);
sort
(
result
);
mergeOverlaps
(
result
);
return
result
;
}
function
sort
DateIntervals
(
intervals
)
{
function
sort
(
intervals
)
{
intervals
.
sort
(
function
(
a
,
b
)
{
return
a
[
0
]
-
b
[
0
];
});
...
...
@@ -243,7 +241,7 @@ function mergeOverlaps(interval) {
var
endSecond
=
interval
[
i
+
1
][
1
];
if
(
endFirst
>=
startSecond
)
{
interval
.
splice
(
i
+
1
,
1
);
interval
[
i
][
1
]
=
endSecond
;
interval
[
i
][
1
]
=
new
Date
(
Math
.
max
(
endFirst
,
endSecond
))
;
}
else
i
++
;
}
...
...
@@ -314,4 +312,6 @@ module.exports.singleDay = singleDay;
module
.
exports
.
orOperator
=
orOperator
;
module
.
exports
.
andOperator
=
andOperator
;
module
.
exports
.
andNotOperator
=
andNotOperator
;
module
.
exports
.
mergeOverlaps
=
mergeOverlaps
;
\ No newline at end of file
module
.
exports
.
mergeOverlaps
=
mergeOverlaps
;
module
.
exports
.
sort
=
sort
;
module
.
exports
.
dateSpan
=
dateSpan
;
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment