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
388fb4c2
Commit
388fb4c2
authored
Jun 30, 2014
by
Johannes Bill
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of /Users/jb/Google Drive/git/OpeningHours
parents
d8f6d8f3
dd40e13c
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
57 additions
and
44 deletions
+57
-44
holidays.js
holidays.js
+5
-3
jsonInput.js
jsonInput.js
+15
-25
testMocha.js
test/testMocha.js
+0
-0
testHof.json
testData/testHof.json
+4
-4
timeUtils.js
timeUtils.js
+30
-11
todo
todo
+3
-1
No files found.
holidays.js
View file @
388fb4c2
...
@@ -42,8 +42,12 @@ function Holidays(year) {
...
@@ -42,8 +42,12 @@ function Holidays(year) {
602
:
50
602
:
50
};
};
var
easterSundays
=
{
2014
:
new
Date
(
2014
,
3
,
20
)
};
function
getEasterSunday
()
{
function
getEasterSunday
()
{
return
new
Date
(
2014
,
3
,
20
)
;
return
easterSundays
[
year
]
;
}
}
function
getFixedHolidays
(
fixedHolidays
,
object
)
{
function
getFixedHolidays
(
fixedHolidays
,
object
)
{
...
@@ -86,6 +90,4 @@ function Holidays(year) {
...
@@ -86,6 +90,4 @@ function Holidays(year) {
}
}
var
holidays
=
new
Holidays
(
2014
);
module
.
exports
=
Holidays
;
module
.
exports
=
Holidays
;
\ No newline at end of file
jsonInput.js
View file @
388fb4c2
...
@@ -7,10 +7,11 @@ var includeString = "810a6deb-46f2-4fa8-b779-bb5c2a6b5577";
...
@@ -7,10 +7,11 @@ var includeString = "810a6deb-46f2-4fa8-b779-bb5c2a6b5577";
var
excludeString
=
"bb74c170-b06f-4d2b-ab88-2f6bf9ce8068"
;
var
excludeString
=
"bb74c170-b06f-4d2b-ab88-2f6bf9ce8068"
;
//var _epochStart = new Date(2014, 3, 0);
//var _epochStart = new Date(2014, 3, 0);
var
_epochStart
=
new
Date
(
2014
,
4
,
2
0
);
var
_epochStart
=
new
Date
(
2014
,
0
,
0
);
//_epochStart.setDate(_epochStart.getDate() - 30);
//_epochStart.setDate(_epochStart.getDate() - 30);
var
_epochEnd
=
new
Date
(
_epochStart
.
getTime
()
+
90
*
24
*
3600000
);
//var _epochEnd = new Date(_epochStart.getTime() + 500 * 24 * 3600000);
var
epocheSpan
=
[
_epochStart
,
_epochEnd
];
var
_epochEnd
=
new
Date
(
2015
,
0
,
0
);
var
epochSpan
=
[
_epochStart
,
_epochEnd
];
function
calculateOpeningHours
(
json
)
{
function
calculateOpeningHours
(
json
)
{
...
@@ -40,7 +41,6 @@ function calculateOpeningHours(json) {
...
@@ -40,7 +41,6 @@ function calculateOpeningHours(json) {
resultExcl
.
push
(
getOpeningHours
(
data
,
option
));
resultExcl
.
push
(
getOpeningHours
(
data
,
option
));
}
}
resultExcl
=
tmUtils
.
orOperator
(
resultExcl
);
resultExcl
=
tmUtils
.
orOperator
(
resultExcl
);
var
allHolidays
=
getAllHolidays
();
var
allHolidays
=
getAllHolidays
();
resultIncl
=
tmUtils
.
orOperator
(
resultIncl
);
resultIncl
=
tmUtils
.
orOperator
(
resultIncl
);
resultIncl
=
tmUtils
.
andNotOperator
(
resultIncl
,
allHolidays
);
resultIncl
=
tmUtils
.
andNotOperator
(
resultIncl
,
allHolidays
);
...
@@ -49,19 +49,6 @@ function calculateOpeningHours(json) {
...
@@ -49,19 +49,6 @@ function calculateOpeningHours(json) {
return
tmUtils
.
andNotOperator
(
resultIncl
,
resultExcl
);
return
tmUtils
.
andNotOperator
(
resultIncl
,
resultExcl
);
}
}
function
getIntervals
(
json
)
{
var
result
=
[];
var
holidays
=
[];
for
(
var
key
in
json
)
{
var
x
=
getOpeningHours
(
json
[
key
]);
if
(
x
)
result
.
push
(
x
);
}
return
tmUtils
.
orOperator
(
result
);
}
function
getDaySpan
(
data
)
{
function
getDaySpan
(
data
)
{
var
dayoption
=
parseInt
(
data
[
"dayoption"
][
"0"
]);
var
dayoption
=
parseInt
(
data
[
"dayoption"
][
"0"
]);
if
(
dayoption
<
7
)
return
[
dayoption
,
dayoption
];
if
(
dayoption
<
7
)
return
[
dayoption
,
dayoption
];
...
@@ -128,8 +115,8 @@ function getAllHolidays() {
...
@@ -128,8 +115,8 @@ function getAllHolidays() {
}
}
function
getDateSpan
(
data
)
{
function
getDateSpan
(
data
)
{
var
startDate
=
parseDate
(
data
[
"opening_day_from"
])
||
_epochStart
;
var
startDate
=
parseDate
(
data
[
"opening_day_from"
])
||
epochSpan
[
0
]
;
var
endDate
=
parseDate
(
data
[
"opening_day_to"
],
true
)
||
_epochEnd
;
var
endDate
=
parseDate
(
data
[
"opening_day_to"
],
true
)
||
epochSpan
[
1
]
;
return
[
startDate
,
endDate
];
return
[
startDate
,
endDate
];
}
}
...
@@ -154,7 +141,7 @@ function getOpeningHours(data, option) {
...
@@ -154,7 +141,7 @@ function getOpeningHours(data, option) {
case
"vacation"
:
case
"vacation"
:
return
getOpeningHoursVacation
(
data
);
return
getOpeningHoursVacation
(
data
);
default
:
default
:
console
.
error
(
"
no propper option found"
);
console
.
error
(
"
option %s not supported"
,
option
);
return
[];
return
[];
}
}
}
}
...
@@ -162,14 +149,14 @@ function getOpeningHours(data, option) {
...
@@ -162,14 +149,14 @@ function getOpeningHours(data, option) {
function
getOpeningHoursDefault
(
data
)
{
function
getOpeningHoursDefault
(
data
)
{
var
daySpan
=
getDaySpan
(
data
);
var
daySpan
=
getDaySpan
(
data
);
var
timeSpan
=
getTimeSpan
(
data
);
var
timeSpan
=
getTimeSpan
(
data
);
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
epoch
eSpan
,
epoche
Span
,
7
);
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
epoch
Span
,
epoch
Span
,
7
);
}
}
function
getOpeningHoursSeason
(
data
)
{
function
getOpeningHoursSeason
(
data
)
{
var
daySpan
=
getDaySpan
(
data
);
var
daySpan
=
getDaySpan
(
data
);
var
timeSpan
=
getTimeSpan
(
data
);
var
timeSpan
=
getTimeSpan
(
data
);
var
dateSpan
=
getDateSpan
(
data
);
var
dateSpan
=
getDateSpan
(
data
);
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
epoch
e
Span
,
7
);
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
epochSpan
,
7
);
}
}
function
getOpeningHoursVacation
(
data
)
{
function
getOpeningHoursVacation
(
data
)
{
...
@@ -187,17 +174,20 @@ function getOpeningHoursRepeatable(data) {
...
@@ -187,17 +174,20 @@ function getOpeningHoursRepeatable(data) {
if
(
repeatOption
<=
4
)
noInMonth
=
repeatOption
;
if
(
repeatOption
<=
4
)
noInMonth
=
repeatOption
;
else
if
(
repeatOption
==
30
)
noInMonth
=
-
1
;
else
if
(
repeatOption
==
30
)
noInMonth
=
-
1
;
if
(
noInMonth
)
if
(
noInMonth
)
return
tmUtils
.
cyclicFromTillDay
(
daySpan
,
noInMonth
,
timeSpan
,
dateSpan
,
epoch
e
Span
);
return
tmUtils
.
cyclicFromTillDay
(
daySpan
,
noInMonth
,
timeSpan
,
dateSpan
,
epochSpan
);
else
{
else
{
switch
(
repeatOption
)
{
switch
(
repeatOption
)
{
case
14
:
case
14
:
case
21
:
case
21
:
case
28
:
case
28
:
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
epoch
e
Span
,
repeatOption
);
return
tmUtils
.
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
epochSpan
,
repeatOption
);
default
:
default
:
console
.
error
(
"invalid repeatoption"
);
console
.
error
(
"invalid repeatoption"
);
}
}
}
}
}
}
console
.
log
(
calculateOpeningHours
(
require
(
'./testData/testHof.json'
)));
var
data1
=
calculateOpeningHours
(
require
(
'./testData/testHof.json'
));
\ No newline at end of file
//data1[0][0] = 0;
console
.
log
(
data1
);
tmUtils
.
validate
(
data1
);
\ No newline at end of file
test/testMocha.js
0 → 100644
View file @
388fb4c2
testData/testHof.json
View file @
388fb4c2
...
@@ -134,10 +134,10 @@
...
@@ -134,10 +134,10 @@
"holidayoption"
:
{
"holidayoption"
:
{
"0"
:
""
"0"
:
""
},
},
"opening_day_from"
:
"
21.05
"
,
"opening_day_from"
:
""
,
"opening_day_to"
:
"
21.06
"
,
"opening_day_to"
:
""
,
"opening_from"
:
"
9
:00"
,
"opening_from"
:
"
10
:00"
,
"opening_to"
:
"1
8
:00"
"opening_to"
:
"1
3
:00"
},
},
"3"
:
{
"3"
:
{
"option"
:
{
"option"
:
{
...
...
timeUtils.js
View file @
388fb4c2
var
assert
=
require
(
'assert'
);
function
compareTimeSpan
(
timeSpan
)
{
function
compareTimeSpan
(
timeSpan
)
{
var
from
=
timeSpan
[
0
];
var
from
=
timeSpan
[
0
];
var
till
=
timeSpan
[
1
];
var
till
=
timeSpan
[
1
];
...
@@ -15,7 +17,7 @@ function transformTimeSpan(timeSpan) {
...
@@ -15,7 +17,7 @@ function transformTimeSpan(timeSpan) {
}
}
function
_cyclicInterval
(
from
,
until
,
interval
,
epochStart
,
epochEnd
)
{
function
_cyclicInterval
(
from
,
until
,
interval
,
epochStart
,
epochEnd
)
{
if
(
from
>=
until
)
throw
new
Error
(
"startDate cant be greater than endDate"
);
if
(
from
.
getTime
()
>=
until
.
getTime
()
)
throw
new
Error
(
"startDate cant be greater than endDate"
);
var
resultArray
=
[];
var
resultArray
=
[];
for
(
var
offset
=
0
;
until
.
getTime
()
+
offset
<
epochEnd
.
getTime
();
offset
+=
interval
)
{
for
(
var
offset
=
0
;
until
.
getTime
()
+
offset
<
epochEnd
.
getTime
();
offset
+=
interval
)
{
resultArray
.
push
([
new
Date
(
from
.
getTime
()
+
offset
),
new
Date
(
until
.
getTime
()
+
offset
)]);
resultArray
.
push
([
new
Date
(
from
.
getTime
()
+
offset
),
new
Date
(
until
.
getTime
()
+
offset
)]);
...
@@ -39,7 +41,7 @@ function _standard(day, timeFrom, timeUntil, startDate, endDate, distanceDays) {
...
@@ -39,7 +41,7 @@ function _standard(day, timeFrom, timeUntil, startDate, endDate, distanceDays) {
function
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
epochSpan
,
daysDistance
)
{
function
standardFromTillDay
(
daySpan
,
timeSpan
,
dateSpan
,
epochSpan
,
daysDistance
)
{
timeSpan
=
transformTimeSpan
(
timeSpan
);
timeSpan
=
transformTimeSpan
(
timeSpan
);
var
dayFrom
=
daySpan
[
0
];
var
dayFrom
=
daySpan
[
0
];
var
dayT
ill
=
daySpan
[
1
];
var
dayT
o
=
daySpan
[
1
];
var
timeFrom
=
timeSpan
[
0
];
var
timeFrom
=
timeSpan
[
0
];
var
timeUntil
=
timeSpan
[
1
];
var
timeUntil
=
timeSpan
[
1
];
var
epochStart
=
dateSpan
[
0
];
var
epochStart
=
dateSpan
[
0
];
...
@@ -48,7 +50,7 @@ function standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, daysDistanc
...
@@ -48,7 +50,7 @@ function standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, daysDistanc
var
firstDays
=
_standard
(
dayFrom
,
timeFrom
,
timeUntil
,
epochStart
,
epochEnd
,
daysDistance
);
var
firstDays
=
_standard
(
dayFrom
,
timeFrom
,
timeUntil
,
epochStart
,
epochEnd
,
daysDistance
);
var
result
=
firstDays
.
slice
();
var
result
=
firstDays
.
slice
();
for
(
var
offset
=
1
;
offset
<=
dayT
ill
-
dayFrom
;
offset
++
)
{
for
(
var
offset
=
1
;
offset
<=
dayT
o
-
dayFrom
;
offset
++
)
{
for
(
var
i
=
0
;
i
<
firstDays
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
firstDays
.
length
;
i
++
)
{
var
start
=
new
Date
(
firstDays
[
i
][
0
]);
var
start
=
new
Date
(
firstDays
[
i
][
0
]);
var
end
=
new
Date
(
firstDays
[
i
][
1
]);
var
end
=
new
Date
(
firstDays
[
i
][
1
]);
...
@@ -91,7 +93,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
...
@@ -91,7 +93,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
timeSpan
=
transformTimeSpan
(
timeSpan
);
timeSpan
=
transformTimeSpan
(
timeSpan
);
var
dayFrom
=
daySpan
[
0
];
var
dayFrom
=
daySpan
[
0
];
var
dayT
ill
=
daySpan
[
1
];
var
dayT
o
=
daySpan
[
1
];
var
timeFrom
=
timeSpan
[
0
];
var
timeFrom
=
timeSpan
[
0
];
var
timeUntil
=
timeSpan
[
1
];
var
timeUntil
=
timeSpan
[
1
];
var
startDate
=
dateSpan
[
0
];
var
startDate
=
dateSpan
[
0
];
...
@@ -121,7 +123,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
...
@@ -121,7 +123,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
result
.
push
([
date0
,
date1
]);
result
.
push
([
date0
,
date1
]);
startDate
=
new
Date
(
date1
);
startDate
=
new
Date
(
date1
);
startDate
.
setDate
(
startDate
.
getDate
()
+
1
);
startDate
.
setDate
(
startDate
.
getDate
()
+
1
);
for
(
var
offset
=
1
;
offset
<=
dayT
ill
-
dayFrom
;
offset
++
)
{
for
(
var
offset
=
1
;
offset
<=
dayT
o
-
dayFrom
;
offset
++
)
{
date0
=
new
Date
(
date0
);
date0
=
new
Date
(
date0
);
date1
=
new
Date
(
date1
);
date1
=
new
Date
(
date1
);
date0
.
setDate
(
date0
.
getDate
()
+
1
);
date0
.
setDate
(
date0
.
getDate
()
+
1
);
...
@@ -184,7 +186,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
...
@@ -184,7 +186,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
}
}
/**
/**
* return a timespan on one day, if no
t
timespan is given,
* return a timespan on one day, if no timespan is given,
* the whole day is returned
* the whole day is returned
*
*
* @param date
* @param date
...
@@ -194,7 +196,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
...
@@ -194,7 +196,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
function
singleDay
(
date
,
timeSpan
)
{
function
singleDay
(
date
,
timeSpan
)
{
var
startDate
,
endDate
;
var
startDate
,
endDate
;
if
(
timeSpan
)
{
if
(
timeSpan
)
{
transformTimeSpan
(
timeSpan
);
t
imeSpan
=
t
ransformTimeSpan
(
timeSpan
);
startDate
=
new
Date
(
date
.
getFullYear
(),
date
.
getMonth
(),
date
.
getDate
(),
timeSpan
[
0
].
h
,
timeSpan
[
0
].
m
);
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
);
endDate
=
new
Date
(
date
.
getFullYear
(),
date
.
getMonth
(),
date
.
getDate
(),
timeSpan
[
1
].
h
,
timeSpan
[
1
].
m
);
}
}
...
@@ -228,7 +230,7 @@ function orOperator(intervals) {
...
@@ -228,7 +230,7 @@ function orOperator(intervals) {
function
sort
(
intervals
)
{
function
sort
(
intervals
)
{
intervals
.
sort
(
function
(
a
,
b
)
{
intervals
.
sort
(
function
(
a
,
b
)
{
return
a
[
0
]
-
b
[
0
]
;
return
a
[
0
]
.
getTime
()
-
b
[
0
].
getTime
()
;
});
});
return
intervals
;
return
intervals
;
}
}
...
@@ -297,15 +299,31 @@ function invert(interval, epochStart, epochEnd) {
...
@@ -297,15 +299,31 @@ function invert(interval, epochStart, epochEnd) {
result
.
push
([
start
,
epochEnd
]);
result
.
push
([
start
,
epochEnd
]);
return
result
;
return
result
;
}
}
/**
* "substracts" interval2 from interval1
* @param interval1
* @param interval2
* @returns {*}
*/
function
andNotOperator
(
interval1
,
interval2
)
{
function
andNotOperator
(
interval1
,
interval2
)
{
var
epochStart
=
new
Date
(
Math
.
min
(
interval1
[
0
][
0
],
interval2
[
0
][
0
]));
var
epochStart
=
new
Date
(
Math
.
min
(
interval1
[
0
][
0
],
interval2
[
0
][
0
]));
var
epochEnd
=
new
Date
(
Math
.
m
in
(
interval1
[
interval1
.
length
-
1
][
1
],
interval2
[
interval2
.
length
-
1
][
1
]));
var
epochEnd
=
new
Date
(
Math
.
m
ax
(
interval1
[
interval1
.
length
-
1
][
1
],
interval2
[
interval2
.
length
-
1
][
1
]));
interval2
=
invert
(
interval2
,
epochStart
,
epochEnd
);
interval2
=
invert
(
interval2
,
epochStart
,
epochEnd
);
return
andOperator
(
interval1
,
interval2
);
return
andOperator
(
interval1
,
interval2
);
}
}
function
validate
(
interval
)
{
assert
(
interval
instanceof
Array
,
"has to be array"
);
for
(
var
i
=
0
;
i
<
interval
.
length
;
i
++
)
{
var
element
=
interval
[
i
];
assert
(
element
instanceof
Array
,
"has to be array"
);
assert
(
element
[
0
]
instanceof
Date
,
"has to be date"
);
assert
(
element
[
1
]
instanceof
Date
,
"has to be date"
);
assert
(
element
[
0
].
getTime
()
<=
element
[
1
].
getTime
(),
"start has to be <= end"
);
}
}
module
.
exports
.
standardFromTillDay
=
standardFromTillDay
;
module
.
exports
.
standardFromTillDay
=
standardFromTillDay
;
module
.
exports
.
cyclicFromTillDay
=
cyclicFromTillDay
;
module
.
exports
.
cyclicFromTillDay
=
cyclicFromTillDay
;
module
.
exports
.
singleDay
=
singleDay
;
module
.
exports
.
singleDay
=
singleDay
;
...
@@ -314,4 +332,5 @@ module.exports.andOperator = andOperator;
...
@@ -314,4 +332,5 @@ module.exports.andOperator = andOperator;
module
.
exports
.
andNotOperator
=
andNotOperator
;
module
.
exports
.
andNotOperator
=
andNotOperator
;
module
.
exports
.
mergeOverlaps
=
mergeOverlaps
;
module
.
exports
.
mergeOverlaps
=
mergeOverlaps
;
module
.
exports
.
sort
=
sort
;
module
.
exports
.
sort
=
sort
;
module
.
exports
.
dateSpan
=
dateSpan
;
module
.
exports
.
dateSpan
=
dateSpan
;
\ No newline at end of file
module
.
exports
.
validate
=
validate
;
todo
View file @
388fb4c2
...
@@ -2,4 +2,6 @@ feiertage defaultmaessig abziehen ausser feiertage sind in der ausschlussliste
...
@@ -2,4 +2,6 @@ feiertage defaultmaessig abziehen ausser feiertage sind in der ausschlussliste
verbindung feiertag - region
verbindung feiertag - region
ics import - regeln extrahieren
ics import - regeln extrahieren
\ No newline at end of file
was passiert bei der zeitumstellung?
\ 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