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
ed95e60c
Commit
ed95e60c
authored
Jun 24, 2014
by
Johannes Bill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
operators finished
parent
0ada255d
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
102 additions
and
20 deletions
+102
-20
app.js
app.js
+98
-20
test.js
test.js
+4
-0
No files found.
app.js
View file @
ed95e60c
//gibt zu betrachtenden Zeitraum an.
var
epocheStart
=
new
Date
(
2014
,
5
,
23
,
0
);
var
epocheEnd
=
new
Date
(
epoche
Start
.
getTime
()
+
30
*
24
*
3600
*
1000
);
var
_epochStart
=
new
Date
(
2014
,
5
,
24
,
0
);
var
_epochEnd
=
new
Date
(
_epoch
Start
.
getTime
()
+
30
*
24
*
3600
*
1000
);
function
cyclicInterval
(
from
,
until
,
interval
)
{
function
_cyclicInterval
(
from
,
until
,
interval
,
epochStart
,
epochEnd
)
{
if
(
from
>=
until
)
throw
new
Error
(
"startDate cant be greater than endDate"
);
var
resultArray
=
[];
for
(
var
offset
=
0
;
until
.
getTime
()
+
offset
<
epocheEnd
.
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
)]);
}
return
resultArray
;
}
/**
*
* @param day weekday 0=sunday
* @param timeFrom
* @param timeFrom.h
* @param timeFrom.m
* @param timeUntil
* @param timeUntil.h
* @param timeUntil.m
* @param epochStart
* @param epochEnd
*/
function
standard
(
day
,
timeFrom
,
timeUntil
,
epochStart
,
epochEnd
)
{
var
dayDiff
=
day
-
epochStart
.
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
);
return
_cyclicInterval
(
startDate
,
endDate
,
7
*
24
*
3600000
,
epochStart
,
epochEnd
);
}
/**
*
* @param dayFrom
* @param dayTill
* @param timeFrom
* @param timeFrom.h
* @param timeFrom.m
* @param timeUntil
* @param timeUntil.h
* @param timeUntil.m
* @param epochStart {Date}
* @param epochEnd {Date}
* @returns {Array}
*/
function
standardFromTillDay
(
dayFrom
,
dayTill
,
timeFrom
,
timeUntil
,
epochStart
,
epochEnd
)
{
var
result
=
[];
for
(
var
i
=
dayFrom
;
i
<=
dayTill
;
i
++
)
{
result
=
result
.
concat
(
standard
(
i
,
timeFrom
,
timeUntil
,
epochStart
,
epochEnd
))
}
result
=
sortDateIntervals
(
result
);
return
result
;
}
function
cyclic
(
dayFrom
,
dayTill
,
noInMonth
,
timeFrom
,
timeUntil
,
epochStart
,
epochEnd
)
{
}
function
_getDateOccurenceInMonth
(
day
,
startDate
,
noInMonth
)
{
startDate
=
new
Date
(
startDate
);
var
dayDiff
=
day
-
startDate
.
getDay
()
+
7
;
startDate
.
setDate
(
startDate
.
getDate
()
+
dayDiff
);
var
currentNoInMonth
=
Math
.
floor
(
startDate
.
getDate
()
/
7
)
+
1
;
while
(
currentNoInMonth
!=
noInMonth
)
{
startDate
=
new
Date
(
startDate
.
getTime
()
+
7
*
24
*
3600000
);
currentNoInMonth
=
Math
.
floor
(
startDate
.
getDate
()
/
7
)
+
1
;
}
return
startDate
;
}
function
orOperator
(
intervals
)
{
var
result
=
[];
for
(
var
i
=
0
;
i
<
intervals
.
length
;
i
++
)
{
result
=
result
.
concat
(
intervals
[
i
]);
}
result
.
sort
(
function
(
a
,
b
)
{
sortDateIntervals
(
result
);
return
result
;
}
function
sortDateIntervals
(
intervals
)
{
intervals
.
sort
(
function
(
a
,
b
)
{
return
a
[
0
]
-
b
[
0
];
});
return
result
;
return
intervals
;
}
function
removeOverlaps
(
interval
)
{
...
...
@@ -47,12 +116,14 @@ function andOperator(interval1, interval2) {
var
end1
=
interval1
[
i
][
1
];
var
start2
=
interval2
[
j
][
0
];
var
end2
=
interval2
[
j
][
1
];
//detect overlap
//no overlap
if
(
end2
<=
start1
)
j
++
;
else
if
(
end1
<=
start2
)
i
++
;
//overlap
else
{
var
newStart
;
var
newEnd
;
...
...
@@ -71,31 +142,38 @@ function andOperator(interval1, interval2) {
return
result
;
}
function
invert
(
interval
)
{
function
invert
(
interval
,
epochStart
,
epochEnd
)
{
var
result
=
[];
var
start
=
epoche
Start
;
var
start
=
epoch
Start
;
for
(
var
i
=
0
;
i
<
interval
.
length
;
i
++
)
{
var
end
=
interval
[
i
][
0
];
if
(
start
<
end
)
if
(
start
<
end
)
result
.
push
([
start
,
end
]);
start
=
interval
[
i
][
1
];
}
if
(
start
<
epoch
e
End
)
result
.
push
([
start
,
epoch
e
End
]);
if
(
start
<
epochEnd
)
result
.
push
([
start
,
epochEnd
]);
return
result
;
}
function
andNotOperator
(
interval1
,
interval2
)
{
interval2
=
invert
(
interval2
);
var
epochStart
=
new
Date
(
Math
.
min
(
interval1
[
0
][
0
],
interval2
[
0
][
0
]));
var
epochEnd
=
new
Date
(
Math
.
min
(
interval1
[
interval1
.
length
-
1
][
1
],
interval2
[
interval2
.
length
-
1
][
1
]));
interval2
=
invert
(
interval2
,
epochStart
,
epochEnd
);
return
andOperator
(
interval1
,
interval2
);
}
//test
//var a = _cyclicInterval(new Date(2014, 5, 23, 9), new Date(2014, 5, 23, 14), 7 * 24 * 3600 * 1000);
//var b = _cyclicInterval(new Date(2014, 5, 23, 10), new Date(2014, 5, 23, 18), 7 * 24 * 3600 * 1000);
//var c = [[new Date(2014, 5, 23, 13), new Date(2014, 6, 6, 10)]];
//var x = andNotOperator(a, b);
//var y = andNotOperator(a, c);
//console.log(y);
var
a
=
cyclicInterval
(
new
Date
(
2014
,
5
,
23
,
9
),
new
Date
(
2014
,
5
,
23
,
14
),
7
*
24
*
3600
*
1000
);
var
b
=
cyclicInterval
(
new
Date
(
2014
,
5
,
23
,
13
),
new
Date
(
2014
,
5
,
23
,
18
),
7
*
24
*
3600
*
1000
);
var
c
=
[[
new
Date
(
2014
,
5
,
23
,
9
),
new
Date
(
2014
,
5
,
30
,
10
)]];
var
x
=
andNotOperator
(
a
,
b
);
//var workday = standardFromTillDay(1, 5, {h: 9, m: 0}, {h: 11, m: 45}, _epochStart, _epochEnd);
//console.log(workday);
var
x
=
_getDateOccurenceInMonth
(
1
,
new
Date
(),
5
);
console
.
log
(
x
);
\ No newline at end of file
test.js
0 → 100644
View file @
ed95e60c
var
x
=
new
Date
();
console
.
log
(
x
);
x
.
setDate
(
-
1
);
console
.
log
(
x
);
\ 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