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
dd40e13c
Commit
dd40e13c
authored
Jun 28, 2014
by
Johannes Bill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added validate function
added validate function removed new holiday removed new holiday
parent
a80c76ee
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
52 additions
and
40 deletions
+52
-40
holidays.js
holidays.js
+5
-3
jsonInput.js
jsonInput.js
+13
-24
testHof.json
testData/testHof.json
+4
-4
timeUtils.js
timeUtils.js
+27
-8
todo
todo
+3
-1
No files found.
holidays.js
View file @
dd40e13c
...
@@ -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 @
dd40e13c
...
@@ -10,8 +10,8 @@ var excludeString = "bb74c170-b06f-4d2b-ab88-2f6bf9ce8068";
...
@@ -10,8 +10,8 @@ var excludeString = "bb74c170-b06f-4d2b-ab88-2f6bf9ce8068";
var
_epochStart
=
new
Date
(
2014
,
0
,
0
);
var
_epochStart
=
new
Date
(
2014
,
0
,
0
);
//_epochStart.setDate(_epochStart.getDate() - 30);
//_epochStart.setDate(_epochStart.getDate() - 30);
//var _epochEnd = new Date(_epochStart.getTime() + 500 * 24 * 3600000);
//var _epochEnd = new Date(_epochStart.getTime() + 500 * 24 * 3600000);
var
_epochEnd
=
new
Date
(
201
6
,
0
,
0
);
var
_epochEnd
=
new
Date
(
201
5
,
0
,
0
);
var
epoch
e
Span
=
[
_epochStart
,
_epochEnd
];
var
epochSpan
=
[
_epochStart
,
_epochEnd
];
function
calculateOpeningHours
(
json
)
{
function
calculateOpeningHours
(
json
)
{
...
@@ -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,18 +174,20 @@ function getOpeningHoursRepeatable(data) {
...
@@ -187,18 +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"
);
}
}
}
}
}
}
var
data
=
calculateOpeningHours
(
require
(
'./testData/testHof.json'
));
var
data1
=
calculateOpeningHours
(
require
(
'./testData/testHof.json'
));
console
.
log
(
data
);
//data1[0][0] = 0;
\ No newline at end of file
console
.
log
(
data1
);
tmUtils
.
validate
(
data1
);
\ No newline at end of file
testData/testHof.json
View file @
dd40e13c
...
@@ -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 @
dd40e13c
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
];
...
@@ -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
);
}
}
...
@@ -297,7 +299,12 @@ function invert(interval, epochStart, epochEnd) {
...
@@ -297,7 +299,12 @@ 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
.
max
(
interval1
[
interval1
.
length
-
1
][
1
],
interval2
[
interval2
.
length
-
1
][
1
]));
var
epochEnd
=
new
Date
(
Math
.
max
(
interval1
[
interval1
.
length
-
1
][
1
],
interval2
[
interval2
.
length
-
1
][
1
]));
...
@@ -306,6 +313,17 @@ function andNotOperator(interval1, interval2) {
...
@@ -306,6 +313,17 @@ function andNotOperator(interval1, interval2) {
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
;
...
@@ -315,3 +333,4 @@ module.exports.andNotOperator = andNotOperator;
...
@@ -315,3 +333,4 @@ 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
;
module
.
exports
.
validate
=
validate
;
\ No newline at end of file
todo
View file @
dd40e13c
...
@@ -3,3 +3,5 @@ feiertage defaultmaessig abziehen ausser feiertage sind in der ausschlussliste
...
@@ -3,3 +3,5 @@ feiertage defaultmaessig abziehen ausser feiertage sind in der ausschlussliste
verbindung feiertag - region
verbindung feiertag - region
ics import - regeln extrahieren
ics import - regeln extrahieren
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