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
c6d7dd88
Commit
c6d7dd88
authored
Jun 26, 2014
by
Johannes Bill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bugfixing
parent
875c19cd
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
263 additions
and
381 deletions
+263
-381
holidays.js
holidays.js
+31
-24
jsonInput.js
jsonInput.js
+58
-19
test.js
test.js
+8
-6
testHof.json
testData/testHof.json
+130
-310
timeUtils.js
timeUtils.js
+36
-22
No files found.
holidays.js
View file @
c6d7dd88
function
Holidays
(
year
)
{
/* var mapping = {
0: "Alle",
101: "Neujahrstag",
106: "Hl. drei Koenige",
301: "Karfreitag",
302: "Ostersonntag",
303: "Ostermontag",
501: "Tag der Arbeit",
502: "Himmelfahrt",
601: "Pfingstsonntag",
602: "Pfingstmontag",
808: "Augsburger Friedensfest",
815: "Mariae Himmelfahrt",
103: "Tag der Deutschen Einheit",
131: "Reformationstag",
111: "Allerheiligen",
121: "Heilig Abend",
122: "Erster Weihnachtstag",
123: "Zweiter Weihnachtstag"};*/
/* var mapping = {
0: "Alle",
101: "Neujahrstag",
106: "Hl. drei Koenige",
301: "Karfreitag",
302: "Ostersonntag",
303: "Ostermontag",
501: "Tag der Arbeit",
502: "Himmelfahrt",
601: "Pfingstsonntag",
602: "Pfingstmontag",
808: "Augsburger Friedensfest",
815: "Mariae Himmelfahrt",
103: "Tag der Deutschen Einheit",
131: "Reformationstag",
111: "Allerheiligen",
121: "Heilig Abend",
122: "Erster Weihnachtstag",
123: "Zweiter Weihnachtstag"};*/
var
fixedHolidays
=
{
101
:
"0101"
,
...
...
@@ -50,8 +50,8 @@ function Holidays(year) {
var
result
=
object
||
{};
for
(
var
key
in
fixedHolidays
)
{
var
dateString
=
fixedHolidays
[
key
];
var
date
=
parseInt
(
dateString
.
slice
(
0
,
2
));
var
month
=
parseInt
(
dateString
.
slice
(
2
,
4
));
var
date
=
parseInt
(
dateString
.
slice
(
0
,
2
));
var
month
=
parseInt
(
dateString
.
slice
(
2
,
4
));
result
[
key
]
=
new
Date
(
year
,
month
-
1
,
date
);
}
return
result
;
...
...
@@ -68,10 +68,18 @@ function Holidays(year) {
}
var
holidays
=
getFixedHolidays
(
fixedHolidays
);
var
holidays
=
getVariableHolidaysMap
(
variableOffsets
,
holidays
);
holidays
=
getVariableHolidaysMap
(
variableOffsets
,
holidays
);
this
.
getHoliday
=
function
(
id
)
{
if
(
id
==
0
)
{
var
result
=
[];
for
(
var
key
in
holidays
)
{
result
.
push
(
holidays
[
key
]);
}
return
result
;
}
if
(
id
in
holidays
)
return
holidays
[
id
];
return
[
holidays
[
id
]
];
console
.
error
(
"invalid holiday id "
+
id
);
return
null
;
}
...
...
@@ -79,6 +87,5 @@ function Holidays(year) {
}
var
holidays
=
new
Holidays
(
2014
);
console
.
log
(
holidays
.
getHoliday
(
2
));
module
.
exports
=
Holidays
;
\ No newline at end of file
jsonInput.js
View file @
c6d7dd88
var
tmUtils
=
require
(
'./timeUtils'
);
var
Holidays
=
require
(
'./holidays'
);
var
now
=
new
Date
();
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
()
+
31
*
24
*
3600000
);
var
_epochEnd
=
new
Date
(
_epochStart
.
getTime
()
+
60
*
24
*
3600000
);
var
epocheSpan
=
[
_epochStart
,
_epochEnd
];
...
...
@@ -14,19 +16,15 @@ function calculateOpeningHours(json) {
var
jsonIncl
=
json
[
includeString
];
var
jsonExcl
=
json
[
excludeString
];
var
resultIncl
=
getIntervals
(
jsonIncl
);
var
resultExcl
=
getIntervals
(
jsonExcl
);
var
result
=
tmUtils
.
andNotOperator
(
resultIncl
,
resultExcl
);
console
.
log
(
result
);
}
function
getHolidays
(
data
)
{
}
function
getIntervals
(
json
)
{
var
result
=
[];
var
holidays
=
[];
...
...
@@ -35,7 +33,7 @@ function getIntervals(json) {
if
(
x
)
result
.
push
(
x
);
else
{
x
=
getHolidays
(
json
[
key
])
x
=
getHolidays
(
json
[
key
])
;
if
(
x
)
holidays
.
push
(
x
);
}
...
...
@@ -44,7 +42,8 @@ function getIntervals(json) {
}
function
getDaySpan
(
dayoption
)
{
function
getDaySpan
(
data
)
{
var
dayoption
=
parseInt
(
data
[
"dayoption"
][
"0"
]);
if
(
dayoption
<
7
)
return
[
dayoption
,
dayoption
];
switch
(
dayoption
)
{
case
7
:
...
...
@@ -56,7 +55,7 @@ function getDaySpan(dayoption) {
case
10
:
return
[
1
,
6
];
default
:
throw
"Invalid day option"
;
console
.
error
(
"Invalid day option"
)
;
}
}
...
...
@@ -75,22 +74,51 @@ function parseDate(date, addOneDay) {
var
year
=
now
.
getFullYear
();
var
split
=
date
.
split
(
"."
);
var
month
=
parseInt
(
split
[
1
])
-
1
;
var
day
=
parseInt
(
split
[
0
])
+
addOneDay
?
1
:
0
;
var
day
=
parseInt
(
split
[
0
])
+
(
addOneDay
?
1
:
0
);
return
new
Date
(
year
,
month
,
day
);
}
function
getOpeningHours
(
data
)
{
function
getHolidays
(
data
)
{
var
option
=
data
[
"option"
][
"0"
];
if
(
option
!=
"holiday"
)
{
console
.
error
(
"data is no holiday"
);
console
.
error
(
data
);
return
null
;
}
var
dayoption
=
parseInt
(
data
[
"dayoption"
][
"0"
]);
var
daySpan
=
getDaySpan
(
dayoption
);
var
timeSpan
=
getTimeSpan
(
data
);
var
holidayId
=
data
[
"holidayoption"
][
0
];
var
days
=
holidaysGetter
.
getHoliday
(
holidayId
);
var
intervals
=
days
.
map
(
function
(
date
)
{
return
tmUtils
.
singleDay
(
date
,
timeSpan
);
});
return
intervals
;
}
function
getDateSpan
(
data
)
{
var
startDate
=
parseDate
(
data
[
"opening_day_from"
])
||
_epochStart
;
var
endDate
=
parseDate
(
data
[
"opening_day_to"
],
true
)
||
_epochEnd
;
var
dateSpan
=
[
startDate
,
endDate
];
return
[
startDate
,
endDate
];
}
function
getTimeSpan
(
data
)
{
return
[
parseTime
(
data
[
"opening_from"
]),
parseTime
(
data
[
"opening_to"
])];
}
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
);
var
timeSpan
=
[
parseTime
(
data
[
"opening_from"
]),
parseTime
(
data
[
"opening_to"
])];
var
result
=
{
type
:
0
};
switch
(
option
)
{
case
"default"
:
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
epocheSpan
,
7
);
...
...
@@ -101,7 +129,6 @@ function getOpeningHours(data) {
var
noInMonth
;
if
(
repeatOption
<=
4
)
noInMonth
=
repeatOption
;
else
if
(
repeatOption
==
30
)
noInMonth
=
-
1
;
if
(
noInMonth
)
return
tmUtils
.
cyclicFromTillDay
(
daySpan
,
noInMonth
,
timeSpan
,
dateSpan
,
epocheSpan
);
...
...
@@ -113,9 +140,21 @@ function getOpeningHours(data) {
default
:
console
.
error
(
"invalid repeatoption"
);
}
}
}
function
getOpeningHoursDefault
(
data
)
{
var
daySpan
=
getDaySpan
(
data
);
var
timeSpan
=
getTimeSpan
(
data
);
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
epocheSpan
,
7
);
}
function
getOpeningHoursSeason
(
data
)
{
var
daySpan
=
getDaySpan
(
data
);
var
timeSpan
=
getTimeSpan
(
data
);
var
dateSpan
=
getDateSpan
(
data
);
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
7
);
}
calculateOpeningHours
(
require
(
'./testData/testHof.json'
));
\ No newline at end of file
test.js
View file @
c6d7dd88
...
...
@@ -17,16 +17,18 @@ console.log("epochEnd ", _epochEnd);
//console.log(workday);
var
t1
=
tmUtils
.
cyclicFromTillDay
(
1
,
1
,
1
,
{
h
:
9
,
m
:
0
},
{
h
:
0
,
m
:
0
},
_epochStart
,
_epochEnd
);
var
t2
=
tmUtils
.
cyclicFromTillDay
(
2
,
2
,
1
,
{
h
:
0
,
m
:
0
},
{
h
:
18
,
m
:
29
},
_epochStart
,
_epochEnd
);
var
t1
=
tmUtils
.
cyclicFromTillDay
(
[
1
,
1
],
1
,
[{
h
:
9
,
m
:
0
},
{
h
:
0
,
m
:
0
}],
[
_epochStart
,
_epochEnd
]
);
var
t2
=
tmUtils
.
cyclicFromTillDay
(
[
2
,
2
],
1
,
[{
h
:
0
,
m
:
0
},
{
h
:
18
,
m
:
29
}],
[
_epochStart
,
_epochEnd
]
);
t1
=
tmUtils
.
standardFromTillDay
(
3
,
3
,
{
h
:
21
,
m
:
0
},
{
h
:
0
,
m
:
0
},
_epochStart
,
_epochEnd
,
7
);
t2
=
tmUtils
.
standardFromTillDay
(
4
,
4
,
{
h
:
0
,
m
:
0
},
{
h
:
18
,
m
:
0
},
_epochStart
,
_epochEnd
,
7
);
t1
=
tmUtils
.
standardFromTillDay
(
[
3
,
3
],
[{
h
:
21
,
m
:
0
},
{
h
:
0
,
m
:
0
}],
[
_epochStart
,
_epochEnd
]
,
7
);
t2
=
tmUtils
.
standardFromTillDay
(
[
4
,
4
],
[{
h
:
0
,
m
:
0
},
{
h
:
18
,
m
:
0
}],
[
_epochStart
,
_epochEnd
]
,
7
);
console
.
log
(
t1
);
console
.
log
(
t2
);
var
t
=
tmUtils
.
orOperator
([
t1
,
t2
,
tmUtils
.
singleDay
(
new
Date
())]);
var
singleDay
=
tmUtils
.
singleDay
(
new
Date
());
console
.
log
(
singleDay
);
var
t
=
tmUtils
.
orOperator
([
t1
,
t2
,
singleDay
]);
console
.
log
(
t
);
console
.
log
(
tmUtils
.
mergeOverlaps
(
t
));
//console.log(tmUtils.orOperator([t,t2]));
\ No newline at end of file
console
.
log
(
tmUtils
.
orOperator
([
t
,
t2
]));
\ No newline at end of file
testData/testHof.json
View file @
c6d7dd88
This diff is collapsed.
Click to expand it.
timeUtils.js
View file @
c6d7dd88
...
...
@@ -86,45 +86,48 @@ function cyclic(day, noInMonth, timeFrom, timeUntil, epochStart, epochEnd) {
}
function
cyclicFromTillDay
(
daySpan
,
noInMonth
,
timeSpan
,
dateSpan
,
epochSpan
)
{
if
(
!
epochSpan
)
epochSpan
=
dateSpan
;
timeSpan
=
transformTimeSpan
(
timeSpan
);
var
dayFrom
=
daySpan
[
0
];
var
dayTill
=
daySpan
[
1
];
var
timeFrom
=
timeSpan
[
0
];
var
timeUntil
=
timeSpan
[
1
];
var
epochStart
=
dateSpan
[
0
];
var
e
pochEnd
=
dateSpan
[
1
];
var
startDate
=
dateSpan
[
0
];
var
e
ndDate
=
dateSpan
[
1
];
//limit dateSpan to epochSpan, to reduce costs
if
(
e
pochEnd
>
epochSpan
[
1
])
epochEnd
=
epochSpan
[
1
];
if
(
epochStart
<
epochSpan
[
0
])
{
if
(
e
ndDate
>
epochSpan
[
1
])
endDate
=
epochSpan
[
1
];
if
(
startDate
<
epochSpan
[
0
])
{
var
t
=
epochSpan
[
0
];
//substract 1 month to cover special cases
epochStart
=
new
Date
(
t
.
getFullYear
(),
t
.
getMonth
()
-
1
,
t
.
getDate
())
startDate
=
new
Date
(
t
.
getFullYear
(),
t
.
getMonth
()
-
1
,
t
.
getDate
())
}
var
result
=
[];
epochStart
=
new
Date
(
epochStart
);
startDate
=
new
Date
(
startDate
);
while
(
true
)
{
var
startDate
=
_getNextNoInMonthOccurence
(
dayFrom
,
epochStart
,
noInMonth
);
startDate
.
setHours
(
timeFrom
.
h
);
startDate
.
setMinutes
(
timeFrom
.
m
);
var
endDate
=
new
Date
(
startDate
);
endDate
.
setHours
(
timeUntil
.
h
);
endDate
.
setMinutes
(
timeUntil
.
m
);
if
(
endDate
>
epochEnd
)
var
date0
=
_getNextNoInMonthOccurence
(
dayFrom
,
startDate
,
noInMonth
);
date0
.
setHours
(
timeFrom
.
h
);
date0
.
setMinutes
(
timeFrom
.
m
);
var
date1
=
new
Date
(
date0
);
date1
.
setHours
(
timeUntil
.
h
);
date1
.
setMinutes
(
timeUntil
.
m
);
if
(
date1
>
endDate
)
break
;
else
{
result
.
push
([
startDate
,
endDate
]);
epochStart
=
new
Date
(
endDate
);
epochStart
.
setDate
(
epochStart
.
getDate
()
+
1
);
result
.
push
([
date0
,
date1
]);
startDate
=
new
Date
(
date1
);
startDate
.
setDate
(
startDate
.
getDate
()
+
1
);
for
(
var
offset
=
1
;
offset
<=
dayTill
-
dayFrom
;
offset
++
)
{
startDate
=
new
Date
(
startDate
);
endDate
=
new
Date
(
endDate
);
startDate
.
setDate
(
startDate
.
getDate
()
+
1
);
endDate
.
setDate
(
endDate
.
getDate
()
+
1
);
if
(
endDate
<=
epochEnd
)
result
.
push
([
startDate
,
endDate
]);
date0
=
new
Date
(
date0
);
date1
=
new
Date
(
date1
);
date0
.
setDate
(
date0
.
getDate
()
+
1
);
date1
.
setDate
(
date1
.
getDate
()
+
1
);
if
(
date1
<=
endDate
)
result
.
push
([
date0
,
date1
]);
else
break
;
}
}
...
...
@@ -191,6 +194,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
function
singleDay
(
date
,
timeSpan
)
{
var
startDate
,
endDate
;
if
(
timeSpan
)
{
transformTimeSpan
(
timeSpan
);
startDate
=
new
Date
(
date
.
getFullYear
(),
date
.
getMonth
(),
date
.
getDate
(),
timeSpan
[
0
].
h
,
timeSpan
[
0
].
m
);
endDate
=
new
Date
(
date
.
getFullYear
(),
date
.
getMonth
(),
date
.
getDate
(),
timeSpan
[
1
].
h
,
timeSpan
[
1
].
m
);
}
...
...
@@ -204,6 +208,16 @@ function singleDay(date, timeSpan) {
];
}
function
dateSpan
(
dateSpan
)
{
var
d0
=
dateSpan
[
0
];
var
d1
=
dateSpan
[
1
];
var
startDate
=
new
Date
(
d0
.
getFullYear
(),
d0
.
getMonth
(),
d0
.
getDay
());
var
endDate
=
new
Date
(
d1
.
getFullYear
(),
d1
.
getMonth
(),
d1
.
getDay
()
+
1
);
return
[
[
startDate
,
endDate
]
];
}
function
orOperator
(
intervals
)
{
var
result
=
[];
for
(
var
i
=
0
;
i
<
intervals
.
length
;
i
++
)
{
...
...
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