Commit ac7d743e authored by Johannes Bill's avatar Johannes Bill

fixed error with mo-mo

parent f14c708e
...@@ -137,7 +137,7 @@ function wrapper(_epochSpan) { ...@@ -137,7 +137,7 @@ function wrapper(_epochSpan) {
case 7: case 7:
return [0, 0]; return [0, 0];
case 8: case 8:
return [0, 7]; return [1, 7];
case 9: case 9:
return [1, 5]; return [1, 5];
case 10: case 10:
......
...@@ -3,14 +3,14 @@ var assert = require('assert'); ...@@ -3,14 +3,14 @@ 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];
if(from.h == till.h) if (from.h == till.h)
return from.m - till.m; return from.m - till.m;
else else
return from.h - till.h return from.h - till.h
} }
function transformTimeSpan(timeSpan) { function transformTimeSpan(timeSpan) {
if(compareTimeSpan(timeSpan) >= 0) { if (compareTimeSpan(timeSpan) >= 0) {
timeSpan[1].h += 24; timeSpan[1].h += 24;
} }
return timeSpan; return timeSpan;
...@@ -26,12 +26,12 @@ function transformTimeSpan(timeSpan) { ...@@ -26,12 +26,12 @@ function transformTimeSpan(timeSpan) {
//} //}
function _cyclicInterval(from, until, distanceDays, epochStart, epochEnd) { function _cyclicInterval(from, until, distanceDays, epochStart, epochEnd) {
if(from.getTime() >= until.getTime()) 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 = [];
from = new Date(from); from = new Date(from);
until = new Date(until); until = new Date(until);
while(until.getTime() <= epochEnd.getTime()) { while (until.getTime() <= epochEnd.getTime()) {
resultArray.push([new Date(from), new Date(until)]); resultArray.push([new Date(from), new Date(until)]);
from.setDate(from.getDate() + distanceDays); from.setDate(from.getDate() + distanceDays);
until.setDate(until.getDate() + distanceDays); until.setDate(until.getDate() + distanceDays);
...@@ -41,18 +41,21 @@ function _cyclicInterval(from, until, distanceDays, epochStart, epochEnd) { ...@@ -41,18 +41,21 @@ function _cyclicInterval(from, until, distanceDays, epochStart, epochEnd) {
function _standard(day, timeFrom, timeUntil, startDate, endDate, distanceDays) { function _standard(day, timeFrom, timeUntil, startDate, endDate, distanceDays) {
var dayDiff = day - startDate.getDay(); var dayDiff = day - startDate.getDay();
if(dayDiff < 0) if(dayDiff > 0) dayDiff -= 7;
dayDiff += 7;
var date0 = new Date(startDate.getFullYear(), startDate.getMonth(), var date0 = new Date(startDate.getFullYear(), startDate.getMonth(),
startDate.getDate() + dayDiff, timeFrom.h, timeFrom.m); startDate.getDate() + dayDiff, timeFrom.h, timeFrom.m);
var date1 = new Date(startDate.getFullYear(), startDate.getMonth(), var date1 = new Date(startDate.getFullYear(), startDate.getMonth(),
startDate.getDate() + dayDiff, timeUntil.h, timeUntil.m); startDate.getDate() + dayDiff, timeUntil.h, timeUntil.m);
return _cyclicInterval(date0, date1, distanceDays, startDate, endDate); return _cyclicInterval(date0, date1, distanceDays, startDate, endDate);
} }
function standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, daysDistance) { function standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, daysDistance) {
if(dateSpan[0] > epochSpan[1] || dateSpan[1] < epochSpan[0]) {
return [];
}
timeSpan = transformTimeSpan(timeSpan); timeSpan = transformTimeSpan(timeSpan);
var dayFrom = daySpan[0]; var dayFrom = daySpan[0];
var dayTo = daySpan[1]; var dayTo = daySpan[1];
...@@ -63,23 +66,24 @@ function standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, daysDistanc ...@@ -63,23 +66,24 @@ 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 <= dayTo - dayFrom; offset++) { for (var offset = 1; offset <= dayTo - 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]);
start.setDate(start.getDate() + offset); start.setDate(start.getDate() + offset);
end.setDate(end.getDate() + offset); end.setDate(end.getDate() + offset);
if(end.getTime() <= epochEnd.getTime()) if (end.getTime() <= epochEnd.getTime())
result.push([start, end]); result.push([start, end]);
} }
} }
result = sort(result); result = sort(result);
result = andOp(result, [dateSpan]);
result = andOp(result, [epochSpan]); result = andOp(result, [epochSpan]);
return result; return result;
} }
function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) { function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
if(!epochSpan) if (!epochSpan)
epochSpan = dateSpan; epochSpan = dateSpan;
timeSpan = transformTimeSpan(timeSpan); timeSpan = transformTimeSpan(timeSpan);
...@@ -91,8 +95,8 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) { ...@@ -91,8 +95,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.getTime() > epochSpan[1].getTime()) endDate = epochSpan[1]; if (endDate.getTime() > epochSpan[1].getTime()) endDate = epochSpan[1];
if(startDate.getTime() < epochSpan[0].getTime()) { 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())
...@@ -101,25 +105,25 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) { ...@@ -101,25 +105,25 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
var result = []; var result = [];
startDate = new Date(startDate); startDate = new Date(startDate);
while(true) { while (true) {
var date0 = _getNextNoInMonthOccurence(dayFrom, startDate, noInMonth); var date0 = _getNextNoInMonthOccurence(dayFrom, startDate, noInMonth);
date0.setHours(timeFrom.h); date0.setHours(timeFrom.h);
date0.setMinutes(timeFrom.m); date0.setMinutes(timeFrom.m);
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.getTime() > endDate.getTime()) if (date1.getTime() > endDate.getTime())
break; break;
else { else {
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 <= dayTo - dayFrom; offset++) { for (var offset = 1; offset <= dayTo - 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);
date1.setDate(date1.getDate() + 1); date1.setDate(date1.getDate() + 1);
if(date1.getTime() <= endDate.getTime()) if (date1.getTime() <= endDate.getTime())
result.push([date0, date1]); result.push([date0, date1]);
else break; else break;
} }
...@@ -134,7 +138,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) { ...@@ -134,7 +138,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
startDate = new Date(startDate); startDate = new Date(startDate);
var _noInMonth; var _noInMonth;
if(noInMonth == -1) { if (noInMonth == -1) {
_noInMonth = 1; _noInMonth = 1;
startDate.setDate(startDate.getDate() + 7); startDate.setDate(startDate.getDate() + 7);
} }
...@@ -143,16 +147,16 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) { ...@@ -143,16 +147,16 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
} }
var dayDiff = day - startDate.getDay(); var dayDiff = day - startDate.getDay();
if(dayDiff < 0) dayDiff += 7; if (dayDiff < 0) dayDiff += 7;
startDate.setDate(startDate.getDate() + dayDiff); startDate.setDate(startDate.getDate() + dayDiff);
var currentNoInMonth = Math.ceil(startDate.getDate() / 7); var currentNoInMonth = Math.ceil(startDate.getDate() / 7);
while(currentNoInMonth != _noInMonth) { while (currentNoInMonth != _noInMonth) {
startDate = new Date(startDate.getTime() + 7 * 24 * 3600000); startDate = new Date(startDate.getTime() + 7 * 24 * 3600000);
currentNoInMonth = Math.ceil(startDate.getDate() / 7); currentNoInMonth = Math.ceil(startDate.getDate() / 7);
} }
if(noInMonth == -1) { if (noInMonth == -1) {
startDate.setDate(startDate.getDate() - 7); startDate.setDate(startDate.getDate() - 7);
} }
return startDate; return startDate;
...@@ -168,7 +172,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) { ...@@ -168,7 +172,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
*/ */
function singleDay(date, timeSpan) { function singleDay(date, timeSpan) {
var startDate, endDate; var startDate, endDate;
if(timeSpan) { if (timeSpan) {
timeSpan = transformTimeSpan(timeSpan); timeSpan = transformTimeSpan(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);
...@@ -193,7 +197,7 @@ function dateSpan(dateSpan) { ...@@ -193,7 +197,7 @@ function dateSpan(dateSpan) {
function orOp(intervals) { function orOp(intervals) {
var result = []; var result = [];
for(var i = 0; i < intervals.length; i++) { for (var i = 0; i < intervals.length; i++) {
result = result.concat(intervals[i]); result = result.concat(intervals[i]);
} }
sort(result); sort(result);
...@@ -202,7 +206,7 @@ function orOp(intervals) { ...@@ -202,7 +206,7 @@ function orOp(intervals) {
} }
function sort(intervals) { function sort(intervals) {
intervals.sort(function(a, b) { intervals.sort(function (a, b) {
return a[0].getTime() - b[0].getTime(); return a[0].getTime() - b[0].getTime();
}); });
return intervals; return intervals;
...@@ -210,11 +214,11 @@ function sort(intervals) { ...@@ -210,11 +214,11 @@ function sort(intervals) {
function mergeOverlaps(interval) { function mergeOverlaps(interval) {
var i = 0; var i = 0;
while(i < interval.length - 1) { while (i < interval.length - 1) {
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.getTime() >= startSecond.getTime()) { 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));
} }
...@@ -228,23 +232,23 @@ function andOp(interval1, interval2) { ...@@ -228,23 +232,23 @@ function andOp(interval1, interval2) {
var i = 0; var i = 0;
var j = 0; var j = 0;
while(i < interval1.length && j < interval2.length) { while (i < interval1.length && j < interval2.length) {
var start1 = interval1[i][0]; var start1 = interval1[i][0];
var end1 = interval1[i][1]; var end1 = interval1[i][1];
var start2 = interval2[j][0]; var start2 = interval2[j][0];
var end2 = interval2[j][1]; var end2 = interval2[j][1];
//no overlap //no overlap
if(end2.getTime() <= start1.getTime()) if (end2.getTime() <= start1.getTime())
j++; j++;
else if(end1.getTime() <= start2.getTime()) else if (end1.getTime() <= start2.getTime())
i++; i++;
//overlap //overlap
else { else {
var newStart; var newStart;
var newEnd; var newEnd;
if(end2.getTime() <= end1.getTime()) { if (end2.getTime() <= end1.getTime()) {
j++; j++;
newEnd = end2; newEnd = end2;
} }
...@@ -262,13 +266,13 @@ function andOp(interval1, interval2) { ...@@ -262,13 +266,13 @@ function andOp(interval1, interval2) {
function invert(interval, epochStart, epochEnd) { function invert(interval, epochStart, epochEnd) {
var result = []; var result = [];
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.getTime() < end.getTime()) if (start.getTime() < end.getTime())
result.push([start, end]); result.push([start, end]);
start = interval[i][1]; start = interval[i][1];
} }
if(start.getTime() < epochEnd.getTime()) if (start.getTime() < epochEnd.getTime())
result.push([start, epochEnd]); result.push([start, epochEnd]);
return result; return result;
} }
...@@ -279,10 +283,10 @@ function invert(interval, epochStart, epochEnd) { ...@@ -279,10 +283,10 @@ function invert(interval, epochStart, epochEnd) {
* @returns Array{dateInterval} * @returns Array{dateInterval}
*/ */
function andNotOp(interval1, interval2) { function andNotOp(interval1, interval2) {
if(!(interval1 && interval1[0] && interval1[0][0])) { if (!(interval1 && interval1[0] && interval1[0][0])) {
return []; return [];
} }
if(!(interval2 && interval2[0] && interval2[0][0])) { if (!(interval2 && interval2[0] && interval2[0][0])) {
return interval1; return interval1;
} }
......
...@@ -19,7 +19,7 @@ module.exports.getData = function (now, cb) { ...@@ -19,7 +19,7 @@ module.exports.getData = function (now, cb) {
// dateArray.setEpocheSpan(epocheSpan); // dateArray.setEpocheSpan(epocheSpan);
// connection.query('SELECT name, elements FROM cms_zoo_item WHERE type in ("pos", "company") ORDER BY id', function (err, rows) { // connection.query('SELECT name, elements FROM cms_zoo_item WHERE type in ("pos", "company") ORDER BY id', function (err, rows) {
connection.query('SELECT name, elements FROM cms_zoo_item WHERE id in (864)', function (err, rows) { connection.query('SELECT name, elements FROM cms_zoo_item WHERE id in (2513)', function (err, rows) {
console.error(err); console.error(err);
console.log(rows.length); console.log(rows.length);
var result = []; var 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