Commit b27b6dec authored by Johannes Bill's avatar Johannes Bill

fixed date comparison, added mocha test

parent 44550a18
...@@ -5,7 +5,9 @@ ...@@ -5,7 +5,9 @@
"dependencies": { "dependencies": {
"express": "^4.4.4" "express": "^4.4.4"
}, },
"devDependencies": {}, "devDependencies": {
"chai": "^1.9.1"
},
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"scripts": { "scripts": {
......
...@@ -15,7 +15,7 @@ function transformTimeSpan(timeSpan) { ...@@ -15,7 +15,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)]);
...@@ -54,7 +54,7 @@ function standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, daysDistanc ...@@ -54,7 +54,7 @@ function standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, daysDistanc
var end = new Date(firstDays[i][1]); var end = new Date(firstDays[i][1]);
start.setDate(start.getDate() + offset); start.setDate(start.getDate() + offset);
end.setDate(end.getDate() + offset); end.setDate(end.getDate() + offset);
if(end <= epochEnd) if(end.getTime() <= epochEnd.getTime())
result.push([start, end]); result.push([start, end]);
} }
} }
...@@ -74,7 +74,7 @@ function cyclic(day, noInMonth, timeFrom, timeUntil, epochStart, epochEnd) { ...@@ -74,7 +74,7 @@ function cyclic(day, noInMonth, timeFrom, timeUntil, epochStart, epochEnd) {
var endDate = new Date(startDate); var endDate = new Date(startDate);
endDate.setHours(timeUntil.h); endDate.setHours(timeUntil.h);
endDate.setMinutes(timeUntil.m); endDate.setMinutes(timeUntil.m);
if(endDate > epochEnd) if(endDate.getTime() > epochEnd.getTime())
break; break;
else { else {
result.push([startDate, endDate]); result.push([startDate, endDate]);
...@@ -98,8 +98,8 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) { ...@@ -98,8 +98,8 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
var endDate = dateSpan[1]; var endDate = dateSpan[1];
//limit dateSpan to epochSpan, to reduce costs //limit dateSpan to epochSpan, to reduce costs
if(endDate > epochSpan[1]) endDate = epochSpan[1]; if(endDate.getTime() > epochSpan[1].getTime()) endDate = epochSpan[1];
if(startDate < epochSpan[0]) { if(startDate.getTime() < epochSpan[0].getTime()) {
var t = epochSpan[0]; var t = epochSpan[0];
//substract 1 month to cover special cases //substract 1 month to cover special cases
startDate = new Date(t.getFullYear(), t.getMonth() - 1, t.getDate()) startDate = new Date(t.getFullYear(), t.getMonth() - 1, t.getDate())
...@@ -115,7 +115,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) { ...@@ -115,7 +115,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
var date1 = new Date(date0); var date1 = new Date(date0);
date1.setHours(timeUntil.h); date1.setHours(timeUntil.h);
date1.setMinutes(timeUntil.m); date1.setMinutes(timeUntil.m);
if(date1 > endDate) if(date1.getTime() > endDate.getTime())
break; break;
else { else {
result.push([date0, date1]); result.push([date0, date1]);
...@@ -126,7 +126,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) { ...@@ -126,7 +126,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
date1 = new Date(date1); date1 = new Date(date1);
date0.setDate(date0.getDate() + 1); date0.setDate(date0.getDate() + 1);
date1.setDate(date1.getDate() + 1); date1.setDate(date1.getDate() + 1);
if(date1 <= endDate) if(date1.getTime() <= endDate.getTime())
result.push([date0, date1]); result.push([date0, date1]);
else break; else break;
} }
...@@ -239,7 +239,7 @@ function mergeOverlaps(interval) { ...@@ -239,7 +239,7 @@ function mergeOverlaps(interval) {
var endFirst = interval[i][1]; var endFirst = interval[i][1];
var startSecond = interval[i + 1][0]; var startSecond = interval[i + 1][0];
var endSecond = interval[i + 1][1]; var endSecond = interval[i + 1][1];
if(endFirst >= startSecond) { if(endFirst.getTime() >= startSecond.getTime()) {
interval.splice(i + 1, 1); interval.splice(i + 1, 1);
interval[i][1] = new Date(Math.max(endFirst, endSecond)); interval[i][1] = new Date(Math.max(endFirst, endSecond));
} }
...@@ -260,16 +260,16 @@ function andOperator(interval1, interval2) { ...@@ -260,16 +260,16 @@ function andOperator(interval1, interval2) {
var end2 = interval2[j][1]; var end2 = interval2[j][1];
//no overlap //no overlap
if(end2 <= start1) if(end2.getTime() <= start1.getTime())
j++; j++;
else if(end1 <= start2) else if(end1.getTime() <= start2.getTime())
i++; i++;
//overlap //overlap
else { else {
var newStart; var newStart;
var newEnd; var newEnd;
if(end2 <= end1) { if(end2.getTime() <= end1.getTime()) {
j++; j++;
newEnd = end2; newEnd = end2;
} }
...@@ -289,11 +289,11 @@ function invert(interval, epochStart, epochEnd) { ...@@ -289,11 +289,11 @@ function invert(interval, epochStart, epochEnd) {
var start = epochStart; var start = epochStart;
for(var i = 0; i < interval.length; i++) { for(var i = 0; i < interval.length; i++) {
var end = interval[i][0]; var end = interval[i][0];
if(start < end) if(start.getTime() < end.getTime())
result.push([start, end]); result.push([start, end]);
start = interval[i][1]; start = interval[i][1];
} }
if(start < epochEnd) if(start.getTime() < epochEnd.getTime())
result.push([start, epochEnd]); result.push([start, epochEnd]);
return result; return result;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment