From 036f41921327dfaebd007e2a888a8013d9117f35 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 16:26:30 +0500 Subject: [PATCH 01/66] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 219 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 189 insertions(+), 30 deletions(-) diff --git a/robbery.js b/robbery.js index 4a8309d..cdffb6e 100644 --- a/robbery.js +++ b/robbery.js @@ -1,50 +1,209 @@ 'use strict'; -/** - * Сделано задание на звездочку - * Реализовано оба метода и tryLater - */ exports.isStar = true; +var timeForWork = { + mon: [{'dateFrom': new Date(2016, 9, 24),'dateTo': new Date(2016, 9, 24)}], + tue: [{'dateFrom': new Date(2016, 9, 25),'dateTo': new Date(2016, 9, 25)}], + wed: [{'dateFrom': new Date(2016, 9, 26),'dateTo': new Date(2016, 9, 26)}] +}; +var goodTime = []; + -/** - * @param {Object} schedule – Расписание Банды - * @param {Number} duration - Время на ограбление в минутах - * @param {Object} workingHours – Время работы банка - * @param {String} workingHours.from – Время открытия, например, "10:00+5" - * @param {String} workingHours.to – Время закрытия, например, "18:00+5" - * @returns {Object} - */ exports.getAppropriateMoment = function (schedule, duration, workingHours) { console.info(schedule, duration, workingHours); + goodTime = normalizeMinAndHour(findTime(schedule, duration, workingHours)); return { - /** - * Найдено ли время - * @returns {Boolean} - */ exists: function () { - return false; + + return typeof (goodTime) === 'object'; }, - /** - * Возвращает отформатированную строку с часами для ограбления - * Например, - * "Начинаем в %HH:%MM (%DD)" -> "Начинаем в 14:59 (СР)" - * @param {String} template - * @returns {String} - */ + format: function (template) { + if (typeof(goodTime) !== 'object') { + + return false; + } + template = template.replace(/(%DD)/g, goodTime[2]); + template = template.replace(/(%HH)/g, goodTime[3]); + template = template.replace(/(%MM)/g, goodTime[4]); + return template; }, - /** - * Попробовать найти часы для ограбления позже [*] - * @star - * @returns {Boolean} - */ tryLater: function () { - return false; + + return getTimeLater(duration * 60000); } }; }; + +function findTime(schedule, duration, workingHours) { + if (typeof(goodTime) === 'object') { + addBankTime(workingHours); + } + addSheduleTime(schedule, workingHours); + + return getTime(duration * 60000); +} + +function getTimeZone(workingHours) { + var string = workingHours.from.toString(); + + return string.charAt(string.length - 1); +} + +function addBankTime(workingHours) { + var open = workingHours.from.split(':'); + var close = workingHours.to.split(':'); + var dateArray = []; + for (var i = 0; i<3; i++) { + dateArray[i] = new Date(2016, 9, (i + 24), parseInt(open[0]), parseInt(open[1])); + dateArray[i + 3] = new Date(2016, 9, (i + 24), parseInt(close[0]), parseInt(close[1].substr(0, 1))); + } + timeForWork.mon[0].dateFrom = dateArray[0]; + timeForWork.mon[0].dateTo = dateArray[3]; + timeForWork.tue[0].dateFrom = dateArray[1]; + timeForWork.tue[0].dateTo = dateArray[4]; + timeForWork.wed[0].dateFrom = dateArray[2]; + timeForWork.wed[0].dateTo = dateArray[5]; + + return true; +} + +function addSheduleTime(schedule, workingHours) { + for (var key in schedule) { + for (var i = 0; i < schedule[key].length; i++) { + correctionSchedule(schedule[key][i], getTimeZone(workingHours)); + changeTimeForWork(schedule[key][i].from, schedule[key][i].to); + } + } + + return true; +} + +function correctionSchedule(interval, timeZone) { + for (var key in interval) { + if (typeof(interval[key]) === 'object') { + + return false; + } + var day = getDay(interval[key].substr(0,2)); + var corrective = timeZone - parseInt(interval[key].substr(9,1), 10); + var hour = parseInt(interval[key].substr(3,2), 10) + corrective; + interval[key] = new Date (2016, 9, day, hour, parseInt(interval[key].substr(6,2), 10)) + } + + return true; +} + +function getDay(string) { + switch (string) { + case 'ПН': + + return 24; + case 'ВТ': + + return 25; + case 'СР': + + return 26; + default: + + return 27; + } +} + +function changeTimeForWork(from, to) { + for (var key in timeForWork) { + for (var i = 0; i < timeForWork[key].length; i++) { + var set = 0; + var dateFrom = timeForWork[key][i].dateFrom; + var dateTo = timeForWork[key][i].dateTo; + var newTime = []; + if ((from-dateFrom)> 0 && (from-dateFrom) < (dateTo-dateFrom)){ + newTime.push({'dateFrom': dateFrom,'dateTo': from}); + set++; + } + if ((dateTo-to)> 0 && (dateTo-to) < (dateTo-dateFrom)){ + newTime.push({'dateFrom': to,'dateTo': dateTo}); + set++; + } + if (set !== 0) { + changeTime(key, i, newTime, set) + } + + } + } + + return true; +} + +function changeTime(key, i, newTime, set) { + timeForWork[key].splice(i, 1); + for (var j = set; j> 0; j--) { + timeForWork[key].splice(i, 0, newTime[j - 1]) + } + + return true; +} + +function getTime(duration) { + for (var key in timeForWork) { + for (var i = 0; i < timeForWork[key].length; i++) { + if ((timeForWork[key][i].dateTo - timeForWork[key][i].dateFrom)>= duration) { + var inform = [key, i]; + switch (timeForWork[key][i].dateTo.getDay()) { + case 1: + inform.push('ПН'); + break; + case 2: + inform.push('ВТ'); + break; + case 3: + inform.push('СР'); + break; + } + inform.push(timeForWork[key][i].dateFrom.getHours(), timeForWork[key][i].dateFrom.getMinutes()); + + return inform; + } + } + } + + return false; +} + +function normalizeMinAndHour(array) { + if (array == false) { + + return false; + } + var normalArray = [array[0], array[1], array[2]]; + if ( array[3] < 10) { + normalArray.push('0' + array[3]); + } else { + normalArray.push(array[3]); + } + if ( array[4] < 10) { + normalArray.push('0' + array[4]); + } else { + normalArray.push(array[4]); + } + + return normalArray; +} + +function getTimeLater(duration) { + var date = timeForWork[goodTime[0]][goodTime[1]].dateFrom; + timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(date.getMinutes() + 30); + if (getTime(duration) === false) { + timeForWork[goodTime[0]][goodTime[1]].dateFrom = date; + + return false; + } + goodTime =normalizeMinAndHour(getTime(duration)); + return getTime(duration); +} From 805af3753aedc3b28ab71fa9c55b681b87bbfe05 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 16:57:34 +0500 Subject: [PATCH 02/66] fix linting --- robbery.js | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/robbery.js b/robbery.js index cdffb6e..32c3fc0 100644 --- a/robbery.js +++ b/robbery.js @@ -2,9 +2,9 @@ exports.isStar = true; var timeForWork = { - mon: [{'dateFrom': new Date(2016, 9, 24),'dateTo': new Date(2016, 9, 24)}], - tue: [{'dateFrom': new Date(2016, 9, 25),'dateTo': new Date(2016, 9, 25)}], - wed: [{'dateFrom': new Date(2016, 9, 26),'dateTo': new Date(2016, 9, 26)}] + mon: [{ 'dateFrom': new Date(2016, 9, 24), 'dateTo': new Date(2016, 9, 24) }], + tue: [{ 'dateFrom': new Date(2016, 9, 25), 'dateTo': new Date(2016, 9, 25) }], + wed: [{ 'dateFrom': new Date(2016, 9, 26), 'dateTo': new Date(2016, 9, 26) }] }; var goodTime = []; @@ -59,9 +59,10 @@ function addBankTime(workingHours) { var open = workingHours.from.split(':'); var close = workingHours.to.split(':'); var dateArray = []; - for (var i = 0; i<3; i++) { + for (var i = 0; i < 3; i++) { + var intHour = parseInt(close[0]); dateArray[i] = new Date(2016, 9, (i + 24), parseInt(open[0]), parseInt(open[1])); - dateArray[i + 3] = new Date(2016, 9, (i + 24), parseInt(close[0]), parseInt(close[1].substr(0, 1))); + dateArray[i + 3] = new Date(2016, 9, (i + 24), intHour, parseInt(close[1].substr(0, 1))); } timeForWork.mon[0].dateFrom = dateArray[0]; timeForWork.mon[0].dateTo = dateArray[3]; @@ -90,10 +91,10 @@ function correctionSchedule(interval, timeZone) { return false; } - var day = getDay(interval[key].substr(0,2)); - var corrective = timeZone - parseInt(interval[key].substr(9,1), 10); - var hour = parseInt(interval[key].substr(3,2), 10) + corrective; - interval[key] = new Date (2016, 9, day, hour, parseInt(interval[key].substr(6,2), 10)) + var day = getDay(interval[key].substr(0, 2)); + var corrective = timeZone - parseInt(interval[key].substr(9, 1), 10); + var hour = parseInt(interval[key].substr(3, 2), 10) + corrective; + interval[key] = new Date (2016, 9, day, hour, parseInt(interval[key].substr(6, 2), 10)); } return true; @@ -123,18 +124,17 @@ function changeTimeForWork(from, to) { var dateFrom = timeForWork[key][i].dateFrom; var dateTo = timeForWork[key][i].dateTo; var newTime = []; - if ((from-dateFrom)> 0 && (from-dateFrom) < (dateTo-dateFrom)){ - newTime.push({'dateFrom': dateFrom,'dateTo': from}); + if ((from - dateFrom)> 0 && (from - dateFrom) < (dateTo - dateFrom)) { + newTime.push({ 'dateFrom': dateFrom, 'dateTo': from }); set++; } - if ((dateTo-to)> 0 && (dateTo-to) < (dateTo-dateFrom)){ - newTime.push({'dateFrom': to,'dateTo': dateTo}); + if ((dateTo - to)> 0 && (dateTo - to) < (dateTo - dateFrom)) { + newTime.push({ 'dateFrom': to, 'dateTo': dateTo }); set++; } if (set !== 0) { - changeTime(key, i, newTime, set) + changeTime(key, i, newTime, set); } - } } @@ -165,8 +165,12 @@ function getTime(duration) { case 3: inform.push('СР'); break; + default: + break; } - inform.push(timeForWork[key][i].dateFrom.getHours(), timeForWork[key][i].dateFrom.getMinutes()); + var time = [timeForWork[key][i].dateFrom.getHours()]; + time.push(timeForWork[key][i].dateFrom.getMinutes()); + inform.push(time[0], time[1]); return inform; } @@ -177,17 +181,17 @@ function getTime(duration) { } function normalizeMinAndHour(array) { - if (array == false) { + if (array === false) { return false; } var normalArray = [array[0], array[1], array[2]]; - if ( array[3] < 10) { + if (array[3] < 10) { normalArray.push('0' + array[3]); } else { normalArray.push(array[3]); } - if ( array[4] < 10) { + if (array[4] < 10) { normalArray.push('0' + array[4]); } else { normalArray.push(array[4]); @@ -204,6 +208,7 @@ function getTimeLater(duration) { return false; } - goodTime =normalizeMinAndHour(getTime(duration)); + goodTime = normalizeMinAndHour(getTime(duration)); + return getTime(duration); } From eebd3558a923723c5a9a687856b3ce76a914142c Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 17:49:06 +0500 Subject: [PATCH 03/66] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/robbery.js b/robbery.js index 32c3fc0..e58b8f9 100644 --- a/robbery.js +++ b/robbery.js @@ -75,12 +75,20 @@ function addBankTime(workingHours) { } function addSheduleTime(schedule, workingHours) { + var keys = []; for (var key in schedule) { - for (var i = 0; i < schedule[key].length; i++) { - correctionSchedule(schedule[key][i], getTimeZone(workingHours)); - changeTimeForWork(schedule[key][i].from, schedule[key][i].to); + if ({}.hasOwnProperty.call(schedule, key)) { + keys.push(key); } } + for (var j = 0; j < keys.length; j++) { + for (var i = 0; i < schedule[keys[j]].length; i++) { + correctionSchedule(schedule[keys[j]][i], getTimeZone(workingHours)); + changeTimeForWork(schedule[keys[j]][i].from, schedule[keys[j]][i].to); + } + } + + return true; } @@ -144,7 +152,7 @@ function changeTimeForWork(from, to) { function changeTime(key, i, newTime, set) { timeForWork[key].splice(i, 1); for (var j = set; j> 0; j--) { - timeForWork[key].splice(i, 0, newTime[j - 1]) + timeForWork[key].splice(i, 0, newTime[j - 1]); } return true; From 65cdb0ccd9dcc2d6cf3bcfab15a703a3069156ff Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 18:11:16 +0500 Subject: [PATCH 04/66] test --- robbery.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index e58b8f9..60f15d3 100644 --- a/robbery.js +++ b/robbery.js @@ -88,8 +88,6 @@ function addSheduleTime(schedule, workingHours) { } } - - return true; } @@ -127,6 +125,9 @@ function getDay(string) { function changeTimeForWork(from, to) { for (var key in timeForWork) { + if ({}.hasOwnProperty.call(timeForWork, key)) { + keys.push(key); + } for (var i = 0; i < timeForWork[key].length; i++) { var set = 0; var dateFrom = timeForWork[key][i].dateFrom; From babb47182b4a1e71c2f0ab9519f87793866ac080 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 18:17:20 +0500 Subject: [PATCH 05/66] fix1 --- robbery.js | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/robbery.js b/robbery.js index 60f15d3..bf34d74 100644 --- a/robbery.js +++ b/robbery.js @@ -125,31 +125,36 @@ function getDay(string) { function changeTimeForWork(from, to) { for (var key in timeForWork) { - if ({}.hasOwnProperty.call(timeForWork, key)) { - keys.push(key); + if (!({}.hasOwnProperty.call(timeForWork, key))) { + return false; } for (var i = 0; i < timeForWork[key].length; i++) { var set = 0; var dateFrom = timeForWork[key][i].dateFrom; var dateTo = timeForWork[key][i].dateTo; var newTime = []; - if ((from - dateFrom)> 0 && (from - dateFrom) < (dateTo - dateFrom)) { - newTime.push({ 'dateFrom': dateFrom, 'dateTo': from }); - set++; - } - if ((dateTo - to)> 0 && (dateTo - to) < (dateTo - dateFrom)) { - newTime.push({ 'dateFrom': to, 'dateTo': dateTo }); - set++; - } - if (set !== 0) { - changeTime(key, i, newTime, set); - } + changingTime(from, to, dateFrom, dateTo, newTime, set, key, i); } } return true; } +function changingTime(from, to, dateFrom, dateTo, newTime, set, key, i ) { + if ((from - dateFrom)> 0 && (from - dateFrom) < (dateTo - dateFrom)) { + newTime.push({ 'dateFrom': dateFrom, 'dateTo': from }); + set++; + } + if ((dateTo - to)> 0 && (dateTo - to) < (dateTo - dateFrom)) { + newTime.push({ 'dateFrom': to, 'dateTo': dateTo }); + set++; + } + if (set !== 0) { + changeTime(key, i, newTime, set); + } + +} + function changeTime(key, i, newTime, set) { timeForWork[key].splice(i, 1); for (var j = set; j> 0; j--) { From beb1495a80adf1fe92f1799405d67c98b4842448 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 18:24:32 +0500 Subject: [PATCH 06/66] 1.1 --- robbery.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/robbery.js b/robbery.js index bf34d74..ee246c1 100644 --- a/robbery.js +++ b/robbery.js @@ -129,18 +129,18 @@ function changeTimeForWork(from, to) { return false; } for (var i = 0; i < timeForWork[key].length; i++) { - var set = 0; - var dateFrom = timeForWork[key][i].dateFrom; - var dateTo = timeForWork[key][i].dateTo; - var newTime = []; - changingTime(from, to, dateFrom, dateTo, newTime, set, key, i); + calculateTime(from, to, key, i); } } return true; } -function changingTime(from, to, dateFrom, dateTo, newTime, set, key, i ) { +function calculateTime(from, to, key, i) { + var set = 0; + var dateFrom = timeForWork[key][i].dateFrom; + var dateTo = timeForWork[key][i].dateTo; + var newTime = []; if ((from - dateFrom)> 0 && (from - dateFrom) < (dateTo - dateFrom)) { newTime.push({ 'dateFrom': dateFrom, 'dateTo': from }); set++; @@ -152,9 +152,9 @@ function changingTime(from, to, dateFrom, dateTo, newTime, set, key, i ) { if (set !== 0) { changeTime(key, i, newTime, set); } - } + function changeTime(key, i, newTime, set) { timeForWork[key].splice(i, 1); for (var j = set; j> 0; j--) { From c006e40fecbd5a619652997848c758d1bb62550c Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 19:26:42 +0500 Subject: [PATCH 07/66] fix2 --- robbery.js | 62 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/robbery.js b/robbery.js index ee246c1..af2f803 100644 --- a/robbery.js +++ b/robbery.js @@ -166,33 +166,51 @@ function changeTime(key, i, newTime, set) { function getTime(duration) { for (var key in timeForWork) { - for (var i = 0; i < timeForWork[key].length; i++) { - if ((timeForWork[key][i].dateTo - timeForWork[key][i].dateFrom)>= duration) { - var inform = [key, i]; - switch (timeForWork[key][i].dateTo.getDay()) { - case 1: - inform.push('ПН'); - break; - case 2: - inform.push('ВТ'); - break; - case 3: - inform.push('СР'); - break; - default: - break; - } - var time = [timeForWork[key][i].dateFrom.getHours()]; - time.push(timeForWork[key][i].dateFrom.getMinutes()); - inform.push(time[0], time[1]); - - return inform; - } + if (!({}.hasOwnProperty.call(timeForWork, key))) { + return false; + } + if (calculateGetTime(key, duration)) { + + return calculateGetTime(key, duration); } + } return false; } +function calculateGetTime(key, duration) { + for (var i = 0; i < timeForWork[key].length; i++) { + if ((timeForWork[key][i].dateTo - timeForWork[key][i].dateFrom)>= duration) { + var inform = [key, i]; + inform.push(switchDay(timeForWork[key][i].dateTo.getDay())); + var time = [timeForWork[key][i].dateFrom.getHours()]; + time.push(timeForWork[key][i].dateFrom.getMinutes()); + inform.push(time[0], time[1]); + + return inform; + } + } + + return false; +} + +function switchDay(day) { + switch (day) { + case 1: + + return 'ПН'; + case 2: + + return 'ВТ'; + case 3: + + return 'СР'; + default: + + return ''; + } + +} function normalizeMinAndHour(array) { if (array === false) { From eea290db14d7bb4eaf61c17f5b20ba3c48ccdd9c Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 19:32:45 +0500 Subject: [PATCH 08/66] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D0=BD=D0=B5?= =?UTF-8?q?=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89?= =?UTF-8?q?=D0=B5=D0=B3=D0=BE=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index af2f803..bc5b771 100644 --- a/robbery.js +++ b/robbery.js @@ -24,7 +24,7 @@ exports.getAppropriateMoment = function (schedule, duration, workingHours) { format: function (template) { if (typeof(goodTime) !== 'object') { - return false; + return ''; } template = template.replace(/(%DD)/g, goodTime[2]); template = template.replace(/(%HH)/g, goodTime[3]); From 6b31505cf1476cc4a0fb6c0285c624d4825e552b Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 19:45:00 +0500 Subject: [PATCH 09/66] fix3 --- robbery.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index bc5b771..2a63b7c 100644 --- a/robbery.js +++ b/robbery.js @@ -34,8 +34,12 @@ exports.getAppropriateMoment = function (schedule, duration, workingHours) { }, tryLater: function () { + if (getTimeLater(duration * 60000) !== false) { - return getTimeLater(duration * 60000); + return true; + } + + return false; } }; }; From 94fb4adbb3624b4f836f75bfcb1f39508b2d047f Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 19:47:42 +0500 Subject: [PATCH 10/66] fix trailing space --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 2a63b7c..bade961 100644 --- a/robbery.js +++ b/robbery.js @@ -38,7 +38,7 @@ exports.getAppropriateMoment = function (schedule, duration, workingHours) { return true; } - + return false; } }; From e3a857565835b114d65ba126b6ef2bc1e836c8a3 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 20:22:12 +0500 Subject: [PATCH 11/66] try --- robbery.js | 1 - 1 file changed, 1 deletion(-) diff --git a/robbery.js b/robbery.js index bade961..f280bf6 100644 --- a/robbery.js +++ b/robbery.js @@ -10,7 +10,6 @@ var goodTime = []; exports.getAppropriateMoment = function (schedule, duration, workingHours) { - console.info(schedule, duration, workingHours); goodTime = normalizeMinAndHour(findTime(schedule, duration, workingHours)); return { From 4db8b537fd0ef87aaaf67080a35ab03f36e518ed Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 20:39:28 +0500 Subject: [PATCH 12/66] try2 --- robbery.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/robbery.js b/robbery.js index f280bf6..b0fa9de 100644 --- a/robbery.js +++ b/robbery.js @@ -33,6 +33,10 @@ exports.getAppropriateMoment = function (schedule, duration, workingHours) { }, tryLater: function () { + if (!this.exists()) { + + return false; + } if (getTimeLater(duration * 60000) !== false) { return true; From 56634c3bee687f32550f103ae36a4adb3c914736 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 20:43:03 +0500 Subject: [PATCH 13/66] no-trailing-spaces? --- robbery.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/robbery.js b/robbery.js index b0fa9de..b1fc777 100644 --- a/robbery.js +++ b/robbery.js @@ -33,11 +33,7 @@ exports.getAppropriateMoment = function (schedule, duration, workingHours) { }, tryLater: function () { - if (!this.exists()) { - - return false; - } - if (getTimeLater(duration * 60000) !== false) { + if (getTimeLater(duration * 60000) !== false || !this.exists()) { return true; } From 150be123dfb5a74d02d0e73ae786b2c3d602f0b2 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月23日 21:36:11 +0500 Subject: [PATCH 14/66] =?UTF-8?q?=D1=8D=D1=8D=D1=8D=D1=8D=D1=8D=D0=BA?= =?UTF-8?q?=D1=81=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index b1fc777..9278a4b 100644 --- a/robbery.js +++ b/robbery.js @@ -1,15 +1,17 @@ 'use strict'; exports.isStar = true; -var timeForWork = { +var timeForWork = {}; +var timeForWorks = { mon: [{ 'dateFrom': new Date(2016, 9, 24), 'dateTo': new Date(2016, 9, 24) }], tue: [{ 'dateFrom': new Date(2016, 9, 25), 'dateTo': new Date(2016, 9, 25) }], wed: [{ 'dateFrom': new Date(2016, 9, 26), 'dateTo': new Date(2016, 9, 26) }] }; var goodTime = []; - exports.getAppropriateMoment = function (schedule, duration, workingHours) { + timeForWork = timeForWorks; + console.info(schedule, duration, workingHours); goodTime = normalizeMinAndHour(findTime(schedule, duration, workingHours)); return { From 711cc7fcc9edd77572983f151d229518aa515042 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月24日 22:59:27 +0500 Subject: [PATCH 15/66] last base fix --- robbery.js | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/robbery.js b/robbery.js index 9278a4b..f3f76af 100644 --- a/robbery.js +++ b/robbery.js @@ -1,16 +1,15 @@ 'use strict'; exports.isStar = true; -var timeForWork = {}; -var timeForWorks = { +// var timeForWork = {}; +var timeForWork = { mon: [{ 'dateFrom': new Date(2016, 9, 24), 'dateTo': new Date(2016, 9, 24) }], tue: [{ 'dateFrom': new Date(2016, 9, 25), 'dateTo': new Date(2016, 9, 25) }], wed: [{ 'dateFrom': new Date(2016, 9, 26), 'dateTo': new Date(2016, 9, 26) }] }; var goodTime = []; -exports.getAppropriateMoment = function (schedule, duration, workingHours) { - timeForWork = timeForWorks; +exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { console.info(schedule, duration, workingHours); goodTime = normalizeMinAndHour(findTime(schedule, duration, workingHours)); @@ -21,7 +20,10 @@ exports.getAppropriateMoment = function (schedule, duration, workingHours) { return typeof (goodTime) === 'object'; }, + sch: function () { + return timeForWork; + }, format: function (template) { if (typeof(goodTime) !== 'object') { @@ -46,7 +48,15 @@ exports.getAppropriateMoment = function (schedule, duration, workingHours) { }; function findTime(schedule, duration, workingHours) { - if (typeof(goodTime) === 'object') { + if (goodTime.length === 5) { + timeForWork = { + mon: [{ 'dateFrom': new Date(2016, 9, 24), 'dateTo': new Date(2016, 9, 24) }], + tue: [{ 'dateFrom': new Date(2016, 9, 25), 'dateTo': new Date(2016, 9, 25) }], + wed: [{ 'dateFrom': new Date(2016, 9, 26), 'dateTo': new Date(2016, 9, 26) }] + }; + goodTime = []; + } + if (typeof(goodTime) === 'object' && goodTime.length === 0) { addBankTime(workingHours); } addSheduleTime(schedule, workingHours); @@ -174,6 +184,7 @@ function getTime(duration) { if (!({}.hasOwnProperty.call(timeForWork, key))) { return false; } + if (calculateGetTime(key, duration)) { return calculateGetTime(key, duration); @@ -184,6 +195,7 @@ function getTime(duration) { return false; } function calculateGetTime(key, duration) { + for (var i = 0; i < timeForWork[key].length; i++) { if ((timeForWork[key][i].dateTo - timeForWork[key][i].dateFrom)>= duration) { var inform = [key, i]; @@ -238,6 +250,10 @@ function normalizeMinAndHour(array) { } function getTimeLater(duration) { + if (typeof(goodTime) === 'boolean' || goodTime.length === 0) { + + return false; + } var date = timeForWork[goodTime[0]][goodTime[1]].dateFrom; timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(date.getMinutes() + 30); if (getTime(duration) === false) { From 6081f035851d4ada629cc406ad3d56996fa24830 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月25日 21:44:35 +0500 Subject: [PATCH 16/66] zero schedule and workHours --- robbery.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index f3f76af..21a993b 100644 --- a/robbery.js +++ b/robbery.js @@ -10,8 +10,12 @@ var timeForWork = { var goodTime = []; exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { - console.info(schedule, duration, workingHours); - goodTime = normalizeMinAndHour(findTime(schedule, duration, workingHours)); + if (typeof(workingHours.from) === 'undefined') { + + goodTime = false; + } else { + goodTime = normalizeMinAndHour(findTime(schedule, duration, workingHours)); + } return { From e41e2f681c0fb7015ff98c87a7f8a9b0f03e0dd7 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月25日 23:41:29 +0500 Subject: [PATCH 17/66] fix long busy time --- robbery.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/robbery.js b/robbery.js index 21a993b..308bf82 100644 --- a/robbery.js +++ b/robbery.js @@ -120,6 +120,7 @@ function correctionSchedule(interval, timeZone) { var corrective = timeZone - parseInt(interval[key].substr(9, 1), 10); var hour = parseInt(interval[key].substr(3, 2), 10) + corrective; interval[key] = new Date (2016, 9, day, hour, parseInt(interval[key].substr(6, 2), 10)); + } return true; @@ -160,21 +161,31 @@ function calculateTime(from, to, key, i) { var dateFrom = timeForWork[key][i].dateFrom; var dateTo = timeForWork[key][i].dateTo; var newTime = []; - if ((from - dateFrom)> 0 && (from - dateFrom) < (dateTo - dateFrom)) { + if ((from - dateFrom)> 0 && from < dateTo) { newTime.push({ 'dateFrom': dateFrom, 'dateTo': from }); set++; } - if ((dateTo - to)> 0 && (dateTo - to) < (dateTo - dateFrom)) { + if ((dateTo - to)> 0 && to> dateFrom) { newTime.push({ 'dateFrom': to, 'dateTo': dateTo }); set++; } + if (to> dateTo && from < dateFrom) { + changeTime(key, -2, dateFrom); + + return true; + } if (set !== 0) { changeTime(key, i, newTime, set); } } - function changeTime(key, i, newTime, set) { + if (i === -2) { + timeForWork[key].splice(0, timeForWork[key].length); + timeForWork[key].push({ 'dateFrom': newTime, 'dateTo': newTime }); + + return true; + } timeForWork[key].splice(i, 1); for (var j = set; j> 0; j--) { timeForWork[key].splice(i, 0, newTime[j - 1]); From 9c6d13f28a9b76f73acfee0c5e9f42e064487181 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 17:05:07 +0500 Subject: [PATCH 18/66] =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/robbery.js b/robbery.js index 308bf82..08fa862 100644 --- a/robbery.js +++ b/robbery.js @@ -1,7 +1,7 @@ 'use strict'; exports.isStar = true; -// var timeForWork = {}; +var DAYS = ['ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС']; var timeForWork = { mon: [{ 'dateFrom': new Date(2016, 9, 24), 'dateTo': new Date(2016, 9, 24) }], tue: [{ 'dateFrom': new Date(2016, 9, 25), 'dateTo': new Date(2016, 9, 25) }], @@ -24,11 +24,12 @@ exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { return typeof (goodTime) === 'object'; }, - sch: function () { - - return timeForWork; - }, format: function (template) { + if (!this.exists()) { + + return ''; + } + if (typeof(goodTime) !== 'object') { return ''; @@ -41,7 +42,11 @@ exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { }, tryLater: function () { - if (getTimeLater(duration * 60000) !== false || !this.exists()) { + if (!this.exists()) { + + return false; + } + if (getTimeLater(duration * 60000) !== false) { return true; } @@ -71,7 +76,7 @@ function findTime(schedule, duration, workingHours) { function getTimeZone(workingHours) { var string = workingHours.from.toString(); - return string.charAt(string.length - 1); + return parseInt(string.substring(6), 10); } function addBankTime(workingHours) { @@ -214,7 +219,7 @@ function calculateGetTime(key, duration) { for (var i = 0; i < timeForWork[key].length; i++) { if ((timeForWork[key][i].dateTo - timeForWork[key][i].dateFrom)>= duration) { var inform = [key, i]; - inform.push(switchDay(timeForWork[key][i].dateTo.getDay())); + inform.push(DAYS[timeForWork[key][i].dateTo.getDay() - 1]); var time = [timeForWork[key][i].dateFrom.getHours()]; time.push(timeForWork[key][i].dateFrom.getMinutes()); inform.push(time[0], time[1]); @@ -226,24 +231,6 @@ function calculateGetTime(key, duration) { return false; } -function switchDay(day) { - switch (day) { - case 1: - - return 'ПН'; - case 2: - - return 'ВТ'; - case 3: - - return 'СР'; - default: - - return ''; - } - -} - function normalizeMinAndHour(array) { if (array === false) { From f1de36c38f2d7b199ba5c8694af04caa54fc4831 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 17:21:15 +0500 Subject: [PATCH 19/66] =?UTF-8?q?=D0=BD=D1=83=D0=BB=D0=B5=D0=B2=D0=BE?= =?UTF-8?q?=D0=B5=20=D0=B2=D1=80=D0=B5=D0=BC=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 08fa862..99103d1 100644 --- a/robbery.js +++ b/robbery.js @@ -30,7 +30,7 @@ exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { return ''; } - if (typeof(goodTime) !== 'object') { + if (typeof(goodTime) !== 'object' || duration === 0) { return ''; } From ada3d2ec761daa91a66b980e508985d71cb16a84 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 18:04:45 +0500 Subject: [PATCH 20/66] =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=BD=D0=BA=D0=B0=20=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?= =?UTF-8?q?=D0=B5=2024"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/robbery.js b/robbery.js index 99103d1..5995097 100644 --- a/robbery.js +++ b/robbery.js @@ -46,6 +46,7 @@ exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { return false; } + if (getTimeLater(duration * 60000) !== false) { return true; @@ -66,6 +67,11 @@ function findTime(schedule, duration, workingHours) { goodTime = []; } if (typeof(goodTime) === 'object' && goodTime.length === 0) { + var close = workingHours.to.split(':'); + if (parseInt(close[0])> 23) { + + return false; + } addBankTime(workingHours); } addSheduleTime(schedule, workingHours); From 342eaee4da2c7fb723869fa3e371bce5cbe7db73 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 18:09:00 +0500 Subject: [PATCH 21/66] =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=BD=D0=BA=D0=B0=20=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?= =?UTF-8?q?=D0=B5=2024(2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index 5995097..b08e30e 100644 --- a/robbery.js +++ b/robbery.js @@ -68,7 +68,7 @@ function findTime(schedule, duration, workingHours) { } if (typeof(goodTime) === 'object' && goodTime.length === 0) { var close = workingHours.to.split(':'); - if (parseInt(close[0])> 23) { + if (parseInt(close[0])> 23 || parseInt(close[1].substr(0, 2))> 59) { return false; } @@ -92,7 +92,7 @@ function addBankTime(workingHours) { for (var i = 0; i < 3; i++) { var intHour = parseInt(close[0]); dateArray[i] = new Date(2016, 9, (i + 24), parseInt(open[0]), parseInt(open[1])); - dateArray[i + 3] = new Date(2016, 9, (i + 24), intHour, parseInt(close[1].substr(0, 1))); + dateArray[i + 3] = new Date(2016, 9, (i + 24), intHour, parseInt(close[1].substr(0, 2))); } timeForWork.mon[0].dateFrom = dateArray[0]; timeForWork.mon[0].dateTo = dateArray[3]; From 2520820248d9b3b576b2c34238fd798ad84aeb72 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 18:27:20 +0500 Subject: [PATCH 22/66] =?UTF-8?q?=D0=BF=D1=83=D1=81=D1=82=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=B1=D0=B0=D0=BD=D0=BA?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index b08e30e..7e457cc 100644 --- a/robbery.js +++ b/robbery.js @@ -68,7 +68,8 @@ function findTime(schedule, duration, workingHours) { } if (typeof(goodTime) === 'object' && goodTime.length === 0) { var close = workingHours.to.split(':'); - if (parseInt(close[0])> 23 || parseInt(close[1].substr(0, 2))> 59) { + close[0] = parseInt(close[0]); + if (workingHours.to === '' || close[0]> 23 || parseInt(close[1].substr(0, 2))> 59) { return false; } From 73fc85ab9651bf27899e9375cf8897191677f073 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 18:40:08 +0500 Subject: [PATCH 23/66] =?UTF-8?q?=D0=BD=D1=83=D0=BB=D0=B5=D0=B2=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=B7=D0=B0=D0=BD=D1=8F=D1=82=D0=BE=D1=81=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/robbery.js b/robbery.js index 7e457cc..d4158ac 100644 --- a/robbery.js +++ b/robbery.js @@ -156,6 +156,10 @@ function getDay(string) { } function changeTimeForWork(from, to) { + if (from.getTime() === to.getTime()) { + + return false; + } for (var key in timeForWork) { if (!({}.hasOwnProperty.call(timeForWork, key))) { return false; From 6a89393348fc5e95594c4b54353569e5a5b40696 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 19:34:25 +0500 Subject: [PATCH 24/66] =?UTF-8?q?=D0=B1=D0=B5=D0=B7=20=D0=B7=D0=B2=D0=B5?= =?UTF-8?q?=D0=B7=D0=B4=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index d4158ac..ee72cd0 100644 --- a/robbery.js +++ b/robbery.js @@ -1,6 +1,6 @@ 'use strict'; -exports.isStar = true; +exports.isStar = false; var DAYS = ['ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС']; var timeForWork = { mon: [{ 'dateFrom': new Date(2016, 9, 24), 'dateTo': new Date(2016, 9, 24) }], From 545776e46c7fb33635706c9637af171439fbb1ca Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 19:45:15 +0500 Subject: [PATCH 25/66] =?UTF-8?q?=D0=B2=D1=80=D0=B5=D0=BC=D1=8F=20=D0=BE?= =?UTF-8?q?=D0=B3=D1=80=D0=B0=D0=B1=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/robbery.js b/robbery.js index ee72cd0..2e9c1e1 100644 --- a/robbery.js +++ b/robbery.js @@ -1,6 +1,6 @@ 'use strict'; -exports.isStar = false; +exports.isStar = true; var DAYS = ['ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС']; var timeForWork = { mon: [{ 'dateFrom': new Date(2016, 9, 24), 'dateTo': new Date(2016, 9, 24) }], @@ -10,7 +10,7 @@ var timeForWork = { var goodTime = []; exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { - if (typeof(workingHours.from) === 'undefined') { + if (typeof(workingHours.from) === 'undefined' || duration === 0) { goodTime = false; } else { @@ -263,7 +263,7 @@ function normalizeMinAndHour(array) { } function getTimeLater(duration) { - if (typeof(goodTime) === 'boolean' || goodTime.length === 0) { + if (typeof(goodTime) === 'boolean' || goodTime.length === 0 ) { return false; } From 6e31934c3cda8983cd30fd92f784b5009177ce3f Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 19:46:30 +0500 Subject: [PATCH 26/66] lint --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 2e9c1e1..6871ced 100644 --- a/robbery.js +++ b/robbery.js @@ -263,7 +263,7 @@ function normalizeMinAndHour(array) { } function getTimeLater(duration) { - if (typeof(goodTime) === 'boolean' || goodTime.length === 0 ) { + if (typeof(goodTime) === 'boolean' || goodTime.length === 0) { return false; } From 0a75d9c32c51c1310059bcaee2555a7749cf5ace Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 20:04:15 +0500 Subject: [PATCH 27/66] =?UTF-8?q?=D0=B2=D1=80=D0=B5=D0=BC=D1=8F=20=D0=BE?= =?UTF-8?q?=D0=B3=D1=80=D0=B0=D0=B1=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/robbery.js b/robbery.js index 6871ced..db8450d 100644 --- a/robbery.js +++ b/robbery.js @@ -10,7 +10,7 @@ var timeForWork = { var goodTime = []; exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { - if (typeof(workingHours.from) === 'undefined' || duration === 0) { + if (typeof(workingHours.from) === 'undefined' || duration <= 0) { goodTime = false; } else { @@ -267,10 +267,10 @@ function getTimeLater(duration) { return false; } - var date = timeForWork[goodTime[0]][goodTime[1]].dateFrom; - timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(date.getMinutes() + 30); + var dateForCheck = timeForWork[goodTime[0]][goodTime[1]].dateFrom; + timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(dateForCheck.getMinutes() + 30); if (getTime(duration) === false) { - timeForWork[goodTime[0]][goodTime[1]].dateFrom = date; + timeForWork[goodTime[0]][goodTime[1]].dateFrom = dateForCheck; return false; } From 7453f70dcc758499e2d0a660aa1ab045b2fa9718 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 20:22:48 +0500 Subject: [PATCH 28/66] timezone --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index db8450d..bd52fe6 100644 --- a/robbery.js +++ b/robbery.js @@ -124,7 +124,7 @@ function addSheduleTime(schedule, workingHours) { function correctionSchedule(interval, timeZone) { for (var key in interval) { - if (typeof(interval[key]) === 'object') { + if (typeof(interval[key]) === 'object' || timeZone> 12) { return false; } From 82ac57cf3a291e54db5148e0527330e3381c17b3 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 20:31:57 +0500 Subject: [PATCH 29/66] timezone2 --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index bd52fe6..f86eacd 100644 --- a/robbery.js +++ b/robbery.js @@ -124,7 +124,7 @@ function addSheduleTime(schedule, workingHours) { function correctionSchedule(interval, timeZone) { for (var key in interval) { - if (typeof(interval[key]) === 'object' || timeZone> 12) { + if (typeof(interval[key]) === 'object' || !(timeZone - Math.floor(timeZone) === 0)) { return false; } From dfb8ef3f180e0683e489e77b5b399d40cd0288fa Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 20:54:05 +0500 Subject: [PATCH 30/66] banktime --- robbery.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/robbery.js b/robbery.js index f86eacd..b927ef2 100644 --- a/robbery.js +++ b/robbery.js @@ -73,6 +73,11 @@ function findTime(schedule, duration, workingHours) { return false; } + var open = workingHours.from.split(':'); + if (workingHours.from === '' || open[0] < 0 || parseInt(open[1].substr(0, 2)) < 0) { + + return false; + } addBankTime(workingHours); } addSheduleTime(schedule, workingHours); From 6cf07f7fdcff0b1e2dedfd08c5d24ef7b08ecc50 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 20:58:37 +0500 Subject: [PATCH 31/66] lint --- robbery.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/robbery.js b/robbery.js index b927ef2..6e99536 100644 --- a/robbery.js +++ b/robbery.js @@ -67,14 +67,7 @@ function findTime(schedule, duration, workingHours) { goodTime = []; } if (typeof(goodTime) === 'object' && goodTime.length === 0) { - var close = workingHours.to.split(':'); - close[0] = parseInt(close[0]); - if (workingHours.to === '' || close[0]> 23 || parseInt(close[1].substr(0, 2))> 59) { - - return false; - } - var open = workingHours.from.split(':'); - if (workingHours.from === '' || open[0] < 0 || parseInt(open[1].substr(0, 2)) < 0) { + if (workingHours.from === '' || !isValidBankTime(workingHours)) { return false; } @@ -85,6 +78,22 @@ function findTime(schedule, duration, workingHours) { return getTime(duration * 60000); } +function isValidBankTime(workingHours) { + var close = workingHours.to.split(':'); + close[0] = parseInt(close[0]); + if (workingHours.to === '' || close[0]> 23 || parseInt(close[1].substr(0, 2))> 59) { + + return false; + } + var open = workingHours.from.split(':'); + if (open[0] < 0 || parseInt(open[1].substr(0, 2)) < 0) { + + return false; + } + + return true; +} + function getTimeZone(workingHours) { var string = workingHours.from.toString(); From 32f570da7216e46569a158f11e3ab3688b83f30b Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 21:26:49 +0500 Subject: [PATCH 32/66] try --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 6e99536..dffe88c 100644 --- a/robbery.js +++ b/robbery.js @@ -67,7 +67,7 @@ function findTime(schedule, duration, workingHours) { goodTime = []; } if (typeof(goodTime) === 'object' && goodTime.length === 0) { - if (workingHours.from === '' || !isValidBankTime(workingHours)) { + if (workingHours.from === '' || !isValidBankTime(workingHours) || isNaN(workingHours.from)) { return false; } From 6c4d5d4bc1a3746971a57a15515b11028619dd2f Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 21:29:35 +0500 Subject: [PATCH 33/66] try2 --- robbery.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index dffe88c..bd81673 100644 --- a/robbery.js +++ b/robbery.js @@ -67,7 +67,7 @@ function findTime(schedule, duration, workingHours) { goodTime = []; } if (typeof(goodTime) === 'object' && goodTime.length === 0) { - if (workingHours.from === '' || !isValidBankTime(workingHours) || isNaN(workingHours.from)) { + if (workingHours.from === '' || !isValidBTime(workingHours) || !isNaN(workingHours.from)) { return false; } @@ -78,7 +78,7 @@ function findTime(schedule, duration, workingHours) { return getTime(duration * 60000); } -function isValidBankTime(workingHours) { +function isValidBTime(workingHours) { var close = workingHours.to.split(':'); close[0] = parseInt(close[0]); if (workingHours.to === '' || close[0]> 23 || parseInt(close[1].substr(0, 2))> 59) { From 3098f49d7204398b2e96bfae001c360921d2248a Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 21:57:35 +0500 Subject: [PATCH 34/66] try --- robbery.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index bd81673..9398e65 100644 --- a/robbery.js +++ b/robbery.js @@ -10,13 +10,14 @@ var timeForWork = { var goodTime = []; exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { + if (typeof(workingHours.from) === 'undefined' || duration <= 0) { goodTime = false; } else { goodTime = normalizeMinAndHour(findTime(schedule, duration, workingHours)); } - + console.log(timeForWork) return { exists: function () { @@ -144,6 +145,8 @@ function correctionSchedule(interval, timeZone) { } var day = getDay(interval[key].substr(0, 2)); var corrective = timeZone - parseInt(interval[key].substr(9, 1), 10); + console.log(interval[key]) + console.log(corrective) var hour = parseInt(interval[key].substr(3, 2), 10) + corrective; interval[key] = new Date (2016, 9, day, hour, parseInt(interval[key].substr(6, 2), 10)); @@ -163,9 +166,12 @@ function getDay(string) { case 'СР': return 26; - default: + case 'ЧТ': return 27; + default: + + return 28; } } From 0bfeea2d7d523cb13d0ed69580b0f2b3637307cb Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 21:58:42 +0500 Subject: [PATCH 35/66] =?UTF-8?q?=D0=B5=D0=BA=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/robbery.js b/robbery.js index 9398e65..1cbc7f7 100644 --- a/robbery.js +++ b/robbery.js @@ -10,14 +10,13 @@ var timeForWork = { var goodTime = []; exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { - if (typeof(workingHours.from) === 'undefined' || duration <= 0) { goodTime = false; } else { goodTime = normalizeMinAndHour(findTime(schedule, duration, workingHours)); } - console.log(timeForWork) + return { exists: function () { @@ -145,8 +144,6 @@ function correctionSchedule(interval, timeZone) { } var day = getDay(interval[key].substr(0, 2)); var corrective = timeZone - parseInt(interval[key].substr(9, 1), 10); - console.log(interval[key]) - console.log(corrective) var hour = parseInt(interval[key].substr(3, 2), 10) + corrective; interval[key] = new Date (2016, 9, day, hour, parseInt(interval[key].substr(6, 2), 10)); From 08119ade2aafa0512e028ea4cff21e9a2ba4c719 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 22:07:00 +0500 Subject: [PATCH 36/66] try --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 1cbc7f7..34024b6 100644 --- a/robbery.js +++ b/robbery.js @@ -10,7 +10,7 @@ var timeForWork = { var goodTime = []; exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { - if (typeof(workingHours.from) === 'undefined' || duration <= 0) { + if (typeof(workingHours.from) === 'undefined' || duration < 0) { goodTime = false; } else { From 86143fe44fc7cff6043919b0068f7319fa0afa33 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 22:59:07 +0500 Subject: [PATCH 37/66] try --- robbery.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index 34024b6..3610116 100644 --- a/robbery.js +++ b/robbery.js @@ -75,6 +75,7 @@ function findTime(schedule, duration, workingHours) { } addSheduleTime(schedule, workingHours); + return getTime(duration * 60000); } @@ -108,15 +109,23 @@ function addBankTime(workingHours) { var intHour = parseInt(close[0]); dateArray[i] = new Date(2016, 9, (i + 24), parseInt(open[0]), parseInt(open[1])); dateArray[i + 3] = new Date(2016, 9, (i + 24), intHour, parseInt(close[1].substr(0, 2))); + if (dateArray[i]> dateArray[i + 3]) { + + return false; + } } + addBankDays(dateArray); + + return true; +} + +function addBankDays(dateArray) { timeForWork.mon[0].dateFrom = dateArray[0]; timeForWork.mon[0].dateTo = dateArray[3]; timeForWork.tue[0].dateFrom = dateArray[1]; timeForWork.tue[0].dateTo = dateArray[4]; timeForWork.wed[0].dateFrom = dateArray[2]; timeForWork.wed[0].dateTo = dateArray[5]; - - return true; } function addSheduleTime(schedule, workingHours) { From 260ee4516257557fb7377838043b5d6b46fc4c42 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 23:04:21 +0500 Subject: [PATCH 38/66] try --- robbery.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index 3610116..861031f 100644 --- a/robbery.js +++ b/robbery.js @@ -67,11 +67,14 @@ function findTime(schedule, duration, workingHours) { goodTime = []; } if (typeof(goodTime) === 'object' && goodTime.length === 0) { - if (workingHours.from === '' || !isValidBTime(workingHours) || !isNaN(workingHours.from)) { + if (workingHours.from === '' || !isValidBTime(workingHours)) { + + return false; + } + if (!addBankTime(workingHours)) { return false; } - addBankTime(workingHours); } addSheduleTime(schedule, workingHours); From 5a0206c86e77ac19619324692fb6af380489b2eb Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 23:21:46 +0500 Subject: [PATCH 39/66] try --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 861031f..8ffd0ca 100644 --- a/robbery.js +++ b/robbery.js @@ -30,7 +30,7 @@ exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { return ''; } - if (typeof(goodTime) !== 'object' || duration === 0) { + if (typeof(goodTime) !== 'object' || duration === 0 || !template) { return ''; } From 4202070962ec989f0b520f901d03f9890010ec18 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月26日 23:36:30 +0500 Subject: [PATCH 40/66] try --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 8ffd0ca..5c1e90d 100644 --- a/robbery.js +++ b/robbery.js @@ -47,7 +47,7 @@ exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { return false; } - if (getTimeLater(duration * 60000) !== false) { + if (getTimeLater(duration * 60000)) { return true; } From 09adf7ac189068ee263b2080bb44bef3b5048054 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 09:14:28 +0500 Subject: [PATCH 41/66] fix bankTime --- robbery.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/robbery.js b/robbery.js index 5c1e90d..278bfe1 100644 --- a/robbery.js +++ b/robbery.js @@ -99,9 +99,10 @@ function isValidBTime(workingHours) { } function getTimeZone(workingHours) { - var string = workingHours.from.toString(); + var timeZoneBank = workingHours.from !== undefined ? Number(workingHours.from + .split('+')[1]) : 0; - return parseInt(string.substring(6), 10); + return timeZoneBank; } function addBankTime(workingHours) { @@ -150,7 +151,7 @@ function addSheduleTime(schedule, workingHours) { function correctionSchedule(interval, timeZone) { for (var key in interval) { - if (typeof(interval[key]) === 'object' || !(timeZone - Math.floor(timeZone) === 0)) { + if (typeof(interval[key]) === 'object' || (timeZone === 0)) { return false; } From 92f889406de77437fe47e4fe9479d3e1796f3c4b Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 09:19:18 +0500 Subject: [PATCH 42/66] fix bankTime2 --- robbery.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index 278bfe1..ca67dd4 100644 --- a/robbery.js +++ b/robbery.js @@ -113,7 +113,7 @@ function addBankTime(workingHours) { var intHour = parseInt(close[0]); dateArray[i] = new Date(2016, 9, (i + 24), parseInt(open[0]), parseInt(open[1])); dateArray[i + 3] = new Date(2016, 9, (i + 24), intHour, parseInt(close[1].substr(0, 2))); - if (dateArray[i]> dateArray[i + 3]) { + if (dateArray[i]> dateArray[i + 3] || !getTimeZone(workingHours)) { return false; } @@ -151,7 +151,7 @@ function addSheduleTime(schedule, workingHours) { function correctionSchedule(interval, timeZone) { for (var key in interval) { - if (typeof(interval[key]) === 'object' || (timeZone === 0)) { + if (typeof(interval[key]) === 'object' || !timeZone) { return false; } From fb42fe1a21d7b6111a804e78a00d7b51720ca327 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 09:24:32 +0500 Subject: [PATCH 43/66] fix timeZone --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index ca67dd4..7c45f02 100644 --- a/robbery.js +++ b/robbery.js @@ -156,7 +156,7 @@ function correctionSchedule(interval, timeZone) { return false; } var day = getDay(interval[key].substr(0, 2)); - var corrective = timeZone - parseInt(interval[key].substr(9, 1), 10); + var corrective = timeZone - parseInt(interval[key].split('+')[1], 10); var hour = parseInt(interval[key].substr(3, 2), 10) + corrective; interval[key] = new Date (2016, 9, day, hour, parseInt(interval[key].substr(6, 2), 10)); From 7996341bea70249ce79efbfc562cb29b15504e68 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 09:39:53 +0500 Subject: [PATCH 44/66] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D1=83=200-=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=82=D0=BE=D1=87=D0=BA=D0=B8=20=D0=B7=D0=B0=D0=BD?= =?UTF-8?q?=D1=8F=D1=82=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 7c45f02..c8ac220 100644 --- a/robbery.js +++ b/robbery.js @@ -188,7 +188,7 @@ function getDay(string) { function changeTimeForWork(from, to) { if (from.getTime() === to.getTime()) { - return false; + // return false; } for (var key in timeForWork) { if (!({}.hasOwnProperty.call(timeForWork, key))) { From 863da001d1a0c7949618e25b647eb8dd8b2daa3b Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 09:53:30 +0500 Subject: [PATCH 45/66] =?UTF-8?q?=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=BE=D0=BD=D1=86=D1=8B=20=D0=BE=D1=82=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/robbery.js b/robbery.js index c8ac220..a049623 100644 --- a/robbery.js +++ b/robbery.js @@ -188,7 +188,7 @@ function getDay(string) { function changeTimeForWork(from, to) { if (from.getTime() === to.getTime()) { - // return false; + return false; } for (var key in timeForWork) { if (!({}.hasOwnProperty.call(timeForWork, key))) { @@ -207,15 +207,15 @@ function calculateTime(from, to, key, i) { var dateFrom = timeForWork[key][i].dateFrom; var dateTo = timeForWork[key][i].dateTo; var newTime = []; - if ((from - dateFrom)> 0 && from < dateTo) { + if (from>= dateFrom && from <= dateTo) { newTime.push({ 'dateFrom': dateFrom, 'dateTo': from }); set++; } - if ((dateTo - to)> 0 && to> dateFrom) { + if (to <= dateTo && to>= dateFrom) { newTime.push({ 'dateFrom': to, 'dateTo': dateTo }); set++; } - if (to> dateTo && from < dateFrom) { + if (to>= dateTo && from <= dateFrom) { changeTime(key, -2, dateFrom); return true; From 05ca0c5ab6abff224d3902a96ee11e2d2b7c35f8 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 09:54:48 +0500 Subject: [PATCH 46/66] =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BD=D1=83=D0=BB=20?= =?UTF-8?q?=D1=81=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D0=B3=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/robbery.js b/robbery.js index a049623..8e7da6d 100644 --- a/robbery.js +++ b/robbery.js @@ -207,15 +207,15 @@ function calculateTime(from, to, key, i) { var dateFrom = timeForWork[key][i].dateFrom; var dateTo = timeForWork[key][i].dateTo; var newTime = []; - if (from>= dateFrom && from <= dateTo) { + if (from> dateFrom && from < dateTo) { newTime.push({ 'dateFrom': dateFrom, 'dateTo': from }); set++; } - if (to <= dateTo && to>= dateFrom) { + if (to < dateTo && to> dateFrom) { newTime.push({ 'dateFrom': to, 'dateTo': dateTo }); set++; } - if (to>= dateTo && from <= dateFrom) { + if (to> dateTo && from < dateFrom) { changeTime(key, -2, dateFrom); return true; From 3f5ca3bc5b1a6838aeb19c52539c8c91ad6e7c5b Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 10:00:02 +0500 Subject: [PATCH 47/66] try --- robbery.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index 8e7da6d..34a3c0f 100644 --- a/robbery.js +++ b/robbery.js @@ -207,11 +207,11 @@ function calculateTime(from, to, key, i) { var dateFrom = timeForWork[key][i].dateFrom; var dateTo = timeForWork[key][i].dateTo; var newTime = []; - if (from> dateFrom && from < dateTo) { + if (from>= dateFrom && from <= dateTo) { newTime.push({ 'dateFrom': dateFrom, 'dateTo': from }); set++; } - if (to < dateTo && to> dateFrom) { + if (to <= dateTo && to>= dateFrom) { newTime.push({ 'dateFrom': to, 'dateTo': dateTo }); set++; } From 73af249dc15db852073eabec31884abc836a94a3 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 10:04:51 +0500 Subject: [PATCH 48/66] try --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 34a3c0f..53f00fd 100644 --- a/robbery.js +++ b/robbery.js @@ -10,7 +10,7 @@ var timeForWork = { var goodTime = []; exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { - if (typeof(workingHours.from) === 'undefined' || duration < 0) { + if (typeof(workingHours.from) === 'undefined' || duration <= 0) { goodTime = false; } else { From b9f9e17ba54b436aa274aeb6a98d0eb7b21c1434 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 10:09:56 +0500 Subject: [PATCH 49/66] =?UTF-8?q?=D0=BD=D0=B5=D1=86=D0=B5=D0=BB=D0=BE?= =?UTF-8?q?=D0=B5=20=D0=B2=D1=80=D0=B5=D0=BC=D1=8F=20=D0=BE=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 53f00fd..c50940b 100644 --- a/robbery.js +++ b/robbery.js @@ -10,7 +10,7 @@ var timeForWork = { var goodTime = []; exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { - if (typeof(workingHours.from) === 'undefined' || duration <= 0) { + if (typeof(workingHours.from) === 'undefined' || !(duration - Math.floor(duration) === 0)) { goodTime = false; } else { From e0c9ee007c77db2a7458e19b48a82a047f9ede7d Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 10:31:39 +0500 Subject: [PATCH 50/66] =?UTF-8?q?=D0=B5=D1=89=D1=91=20=D0=BE=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=80?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8=20=D0=B1=D0=B0=D0=BD=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/robbery.js b/robbery.js index c50940b..58dccec 100644 --- a/robbery.js +++ b/robbery.js @@ -83,14 +83,11 @@ function findTime(schedule, duration, workingHours) { } function isValidBTime(workingHours) { - var close = workingHours.to.split(':'); - close[0] = parseInt(close[0]); - if (workingHours.to === '' || close[0]> 23 || parseInt(close[1].substr(0, 2))> 59) { + if (workingHours.to === '' || isValidOneTime(workingHours.to.split(':'))) { return false; } - var open = workingHours.from.split(':'); - if (open[0] < 0 || parseInt(open[1].substr(0, 2)) < 0) { + if (workingHours.from === '' || isValidOneTime(workingHours.from.split(':'))) { return false; } @@ -98,6 +95,17 @@ function isValidBTime(workingHours) { return true; } +function isValidOneTime(time) { + time[0] = parseInt(time[0]); + time[1] = parseInt(time[1].split('+')[0]); + if (time[0] < 0 || time[0]> 23 || time[1] < 0 || time[1]> 59) { + + return true; + } + + return false; +} + function getTimeZone(workingHours) { var timeZoneBank = workingHours.from !== undefined ? Number(workingHours.from .split('+')[1]) : 0; From 056a58ae59dc16586ba2c13db8e84ba2aea1e8ec Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 10:38:52 +0500 Subject: [PATCH 51/66] =?UTF-8?q?=D0=B5=D1=89=D1=91=20=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index 58dccec..48b5650 100644 --- a/robbery.js +++ b/robbery.js @@ -98,7 +98,7 @@ function isValidBTime(workingHours) { function isValidOneTime(time) { time[0] = parseInt(time[0]); time[1] = parseInt(time[1].split('+')[0]); - if (time[0] < 0 || time[0]> 23 || time[1] < 0 || time[1]> 59) { + if (time[0] < 0 < time[0]> 23 || time[1] < 0 || time[1]> 59) { return true; } @@ -120,7 +120,7 @@ function addBankTime(workingHours) { for (var i = 0; i < 3; i++) { var intHour = parseInt(close[0]); dateArray[i] = new Date(2016, 9, (i + 24), parseInt(open[0]), parseInt(open[1])); - dateArray[i + 3] = new Date(2016, 9, (i + 24), intHour, parseInt(close[1].substr(0, 2))); + dateArray[i + 3] = new Date(2016, 9, (i + 24), intHour, parseInt(close[1].split('+')[0])); if (dateArray[i]> dateArray[i + 3] || !getTimeZone(workingHours)) { return false; From b7356265cab702d0efbb99dcd2f9da000be72c0f Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 11:19:19 +0500 Subject: [PATCH 52/66] =?UTF-8?q?=D0=BE=D1=87=D0=B5=D0=BF=D1=8F=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BD=D0=B0=D1=88=D0=BB=D0=B0=D1=81=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 48b5650..e6ef182 100644 --- a/robbery.js +++ b/robbery.js @@ -98,7 +98,7 @@ function isValidBTime(workingHours) { function isValidOneTime(time) { time[0] = parseInt(time[0]); time[1] = parseInt(time[1].split('+')[0]); - if (time[0] < 0 < time[0]> 23 || time[1] < 0 || time[1]> 59) { + if (time[0] < 0 || time[0]> 23 || time[1] < 0 || time[1]> 59) { return true; } From b370eaed152fab4b0645a06d3261a718d99c3b3f Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 11:26:20 +0500 Subject: [PATCH 53/66] =?UTF-8?q?=D0=B5=D1=89=D1=91=20=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index e6ef182..dab545b 100644 --- a/robbery.js +++ b/robbery.js @@ -10,7 +10,7 @@ var timeForWork = { var goodTime = []; exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { - if (typeof(workingHours.from) === 'undefined' || !(duration - Math.floor(duration) === 0)) { + if (typeof(workingHours) === 'undefined' || !(duration - Math.floor(duration) === 0)) { goodTime = false; } else { From 07b4dbca71eff024e5b72e3478326086dd7af3c1 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 11:34:27 +0500 Subject: [PATCH 54/66] test undefi --- robbery.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/robbery.js b/robbery.js index dab545b..4fc7e0f 100644 --- a/robbery.js +++ b/robbery.js @@ -10,9 +10,10 @@ var timeForWork = { var goodTime = []; exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { - if (typeof(workingHours) === 'undefined' || !(duration - Math.floor(duration) === 0)) { - - goodTime = false; + if (typeof(workingHours) === 'undefined' || typeof(duration) === 'undefined' || duration <= 0) { + if (typeof(schedule) === 'undefined') { + goodTime = false; + } } else { goodTime = normalizeMinAndHour(findTime(schedule, duration, workingHours)); } From 9850994f69b648722d8c661dd48f95f14bfe379e Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 11:35:54 +0500 Subject: [PATCH 55/66] =?UTF-8?q?=D0=B1=D0=B5=D0=B7=20undef?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/robbery.js b/robbery.js index 4fc7e0f..a45812b 100644 --- a/robbery.js +++ b/robbery.js @@ -10,10 +10,8 @@ var timeForWork = { var goodTime = []; exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { - if (typeof(workingHours) === 'undefined' || typeof(duration) === 'undefined' || duration <= 0) { - if (typeof(schedule) === 'undefined') { - goodTime = false; - } + if (duration <= 0) { + goodTime = false; } else { goodTime = normalizeMinAndHour(findTime(schedule, duration, workingHours)); } From 07e85675b4e3fce45ae7a7708c4265a4df483864 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 11:40:35 +0500 Subject: [PATCH 56/66] tru --- robbery.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index a45812b..814a91e 100644 --- a/robbery.js +++ b/robbery.js @@ -74,9 +74,8 @@ function findTime(schedule, duration, workingHours) { return false; } + addSheduleTime(schedule, workingHours); } - addSheduleTime(schedule, workingHours); - return getTime(duration * 60000); } From b3c541906ac5563f3b59e66e1dc140b0447bbcd1 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 11:50:46 +0500 Subject: [PATCH 57/66] test --- robbery.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/robbery.js b/robbery.js index 814a91e..f5c298c 100644 --- a/robbery.js +++ b/robbery.js @@ -41,11 +41,6 @@ exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { }, tryLater: function () { - if (!this.exists()) { - - return false; - } - if (getTimeLater(duration * 60000)) { return true; @@ -249,6 +244,7 @@ function changeTime(key, i, newTime, set) { function getTime(duration) { for (var key in timeForWork) { if (!({}.hasOwnProperty.call(timeForWork, key))) { + return false; } From dde115684221111767d7e3b61e0036992ed9e25d Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 12:19:00 +0500 Subject: [PATCH 58/66] try --- robbery.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index f5c298c..56a7037 100644 --- a/robbery.js +++ b/robbery.js @@ -295,12 +295,19 @@ function normalizeMinAndHour(array) { } function getTimeLater(duration) { - if (typeof(goodTime) === 'boolean' || goodTime.length === 0) { + if (typeof(goodTime) === 'boolean' || goodTime.length !== 5) { return false; } var dateForCheck = timeForWork[goodTime[0]][goodTime[1]].dateFrom; - timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(dateForCheck.getMinutes() + 30); + var dateFr = timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(dateForCheck + .getMinutes() + 30); + var dateTo = timeForWork[goodTime[0]][goodTime[1]].dateFrom; + if (dateFr>= dateTo) { + timeForWork[goodTime[0]][goodTime[1]].dateFrom = dateTo; + } else { + timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(dateForCheck.getMinutes() + 30); + } if (getTime(duration) === false) { timeForWork[goodTime[0]][goodTime[1]].dateFrom = dateForCheck; From 0466c7b6c074ab4309305273bfd4c3ed933f5689 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 12:35:12 +0500 Subject: [PATCH 59/66] =?UTF-8?q?=D0=B8=D0=B7=D0=B2=D1=80=D0=B0=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/robbery.js b/robbery.js index 56a7037..0477c4b 100644 --- a/robbery.js +++ b/robbery.js @@ -182,7 +182,23 @@ function getDay(string) { return 27; default: + return getDay2(string); + } +} +function getDay2(string) { + switch (string) { + case 'ПТ': + return 28; + case 'СБ': + + return 29; + case 'ВС': + + return 30; + default: + + return 31; } } @@ -300,14 +316,7 @@ function getTimeLater(duration) { return false; } var dateForCheck = timeForWork[goodTime[0]][goodTime[1]].dateFrom; - var dateFr = timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(dateForCheck - .getMinutes() + 30); - var dateTo = timeForWork[goodTime[0]][goodTime[1]].dateFrom; - if (dateFr>= dateTo) { - timeForWork[goodTime[0]][goodTime[1]].dateFrom = dateTo; - } else { - timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(dateForCheck.getMinutes() + 30); - } + timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(dateForCheck.getMinutes() + 30); if (getTime(duration) === false) { timeForWork[goodTime[0]][goodTime[1]].dateFrom = dateForCheck; From a36e753fee57e30e1f4db1b90a304cd6edf81495 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 12:42:05 +0500 Subject: [PATCH 60/66] try --- robbery.js | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/robbery.js b/robbery.js index 0477c4b..e8c77b1 100644 --- a/robbery.js +++ b/robbery.js @@ -89,9 +89,10 @@ function isValidBTime(workingHours) { } function isValidOneTime(time) { + var timeZone = parseInt(time[1].split('+')[1]); time[0] = parseInt(time[0]); time[1] = parseInt(time[1].split('+')[0]); - if (time[0] < 0 || time[0]> 23 || time[1] < 0 || time[1]> 59) { + if (time[0] < 0 || time[0]> 23 || time[1] < 0 || time[1]> 59 || timeZone> 24) { return true; } @@ -152,7 +153,8 @@ function addSheduleTime(schedule, workingHours) { function correctionSchedule(interval, timeZone) { for (var key in interval) { - if (typeof(interval[key]) === 'object' || !timeZone) { + if (typeof(interval[key]) === 'object' || !timeZone || parseInt(interval[key] + .split('+')[1])> 24) { return false; } @@ -182,23 +184,7 @@ function getDay(string) { return 27; default: - return getDay2(string); - } -} -function getDay2(string) { - switch (string) { - case 'ПТ': - - return 28; - case 'СБ': - - return 29; - case 'ВС': - - return 30; - default: - - return 31; + return 38; } } From 3186669b28ad1dd0aee841618482bf79a71dac2a Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 13:03:11 +0500 Subject: [PATCH 61/66] try --- robbery.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index e8c77b1..9675e6b 100644 --- a/robbery.js +++ b/robbery.js @@ -41,6 +41,10 @@ exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { }, tryLater: function () { + if (!this.exists()) { + + return false; + } if (getTimeLater(duration * 60000)) { return true; @@ -189,7 +193,7 @@ function getDay(string) { } function changeTimeForWork(from, to) { - if (from.getTime() === to.getTime()) { + if (from.getTime() === to.getTime() || from> to) { return false; } From bff08104edc593e5b0e8a17ff75d730976d5d0b1 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月27日 16:09:51 +0500 Subject: [PATCH 62/66] fixLater --- robbery.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/robbery.js b/robbery.js index 9675e6b..65efc71 100644 --- a/robbery.js +++ b/robbery.js @@ -306,6 +306,7 @@ function getTimeLater(duration) { return false; } var dateForCheck = timeForWork[goodTime[0]][goodTime[1]].dateFrom; + transferLate(dateForCheck); timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(dateForCheck.getMinutes() + 30); if (getTime(duration) === false) { timeForWork[goodTime[0]][goodTime[1]].dateFrom = dateForCheck; @@ -316,3 +317,34 @@ function getTimeLater(duration) { return getTime(duration); } + +function transferLate(dateForCheck) { + var a = dateForCheck; + var b = new Date(a); + b.setMinutes(b.getMinutes() + 30); + if (a.getDay() !== b.getDay()) { + addBusyLate(getKey(b.getDay()), b.valueOf()); + } + + return a; +} + +function getKey(day) { + switch (day) { + case 2: + + return 'tue'; + case 3: + + return 'wed'; + default: + + return 0; + } +} + +function addBusyLate(day, value) { + if (timeForWork[day][0].dateFrom.valueOf() < value) { + timeForWork[day][0].dateFrom = new Date(value); + } +} From dac651117eb3a9c3d7ccf7b0f91b018b3bd324bc Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年10月29日 12:01:42 +0500 Subject: [PATCH 63/66] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D1=81=D0=BA?= =?UTF-8?q?=D0=BE=D0=BA=20Later2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/robbery.js b/robbery.js index 65efc71..1b50580 100644 --- a/robbery.js +++ b/robbery.js @@ -306,7 +306,7 @@ function getTimeLater(duration) { return false; } var dateForCheck = timeForWork[goodTime[0]][goodTime[1]].dateFrom; - transferLate(dateForCheck); + transferLate(dateForCheck, goodTime[0], goodTime[1]); timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(dateForCheck.getMinutes() + 30); if (getTime(duration) === false) { timeForWork[goodTime[0]][goodTime[1]].dateFrom = dateForCheck; @@ -318,12 +318,15 @@ function getTimeLater(duration) { return getTime(duration); } -function transferLate(dateForCheck) { +function transferLate(dateForCheck, day, num) { var a = dateForCheck; var b = new Date(a); b.setMinutes(b.getMinutes() + 30); + if (timeForWork[day][num + 1] !== undefined && b> timeForWork[day][num + 1].dateFrom) { + addBusyLate(day, (num + 1), b.valueOf()); + } if (a.getDay() !== b.getDay()) { - addBusyLate(getKey(b.getDay()), b.valueOf()); + addBusyLate(getKey(b.getDay()), 0, b.valueOf()); } return a; @@ -343,8 +346,8 @@ function getKey(day) { } } -function addBusyLate(day, value) { - if (timeForWork[day][0].dateFrom.valueOf() < value) { - timeForWork[day][0].dateFrom = new Date(value); +function addBusyLate(day, num, value) { + if (timeForWork[day][num].dateFrom.valueOf() < value) { + timeForWork[day][num].dateFrom = new Date(value); } } From 9969c8f445d14dd0e8f978a09576ac333d18a1df Mon Sep 17 00:00:00 2001 From: Zeace Date: Fri, 4 Nov 2016 15:09:09 +0500 Subject: [PATCH 64/66] =?UTF-8?q?=D0=B7=D0=BD=D0=B0=D1=87=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B0=D0=BB=20=D0=B8=20=D0=BE=D0=BF=D1=82=D0=B8?= =?UTF-8?q?=D0=BC=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 235 +++++++++++++++++------------------------------------ 1 file changed, 76 insertions(+), 159 deletions(-) diff --git a/robbery.js b/robbery.js index 1b50580..58a21be 100644 --- a/robbery.js +++ b/robbery.js @@ -2,19 +2,12 @@ exports.isStar = true; var DAYS = ['ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС']; -var timeForWork = { - mon: [{ 'dateFrom': new Date(2016, 9, 24), 'dateTo': new Date(2016, 9, 24) }], - tue: [{ 'dateFrom': new Date(2016, 9, 25), 'dateTo': new Date(2016, 9, 25) }], - wed: [{ 'dateFrom': new Date(2016, 9, 26), 'dateTo': new Date(2016, 9, 26) }] -}; -var goodTime = []; -exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { - if (duration <= 0) { - goodTime = false; - } else { - goodTime = normalizeMinAndHour(findTime(schedule, duration, workingHours)); - } +exports.getAppropriateMoment = function (schedule, duration, workingHours) { + console.info(schedule, duration, workingHours); + var timeForWork = findTime(schedule, workingHours, duration); + + var goodTime = normalizeMinAndHour(getTime(duration * 60000, timeForWork)); return { @@ -28,87 +21,38 @@ exports.getAppropriateMoment = function ah(schedule, duration, workingHours) { return ''; } - if (typeof(goodTime) !== 'object' || duration === 0 || !template) { return ''; } - template = template.replace(/(%DD)/g, goodTime[2]); - template = template.replace(/(%HH)/g, goodTime[3]); - template = template.replace(/(%MM)/g, goodTime[4]); + template = template.replace(/(%DD)/g, goodTime[1]); + template = template.replace(/(%HH)/g, goodTime[2]); + template = template.replace(/(%MM)/g, goodTime[3]); return template; }, tryLater: function () { + var oldGoodTime = goodTime; if (!this.exists()) { return false; } - if (getTimeLater(duration * 60000)) { + if ((goodTime = getTimeLater(duration * 60000, timeForWork, goodTime))) { return true; } + goodTime = oldGoodTime; return false; } }; }; -function findTime(schedule, duration, workingHours) { - if (goodTime.length === 5) { - timeForWork = { - mon: [{ 'dateFrom': new Date(2016, 9, 24), 'dateTo': new Date(2016, 9, 24) }], - tue: [{ 'dateFrom': new Date(2016, 9, 25), 'dateTo': new Date(2016, 9, 25) }], - wed: [{ 'dateFrom': new Date(2016, 9, 26), 'dateTo': new Date(2016, 9, 26) }] - }; - goodTime = []; - } - if (typeof(goodTime) === 'object' && goodTime.length === 0) { - if (workingHours.from === '' || !isValidBTime(workingHours)) { - - return false; - } - if (!addBankTime(workingHours)) { - - return false; - } - addSheduleTime(schedule, workingHours); - } - - return getTime(duration * 60000); -} - -function isValidBTime(workingHours) { - if (workingHours.to === '' || isValidOneTime(workingHours.to.split(':'))) { - - return false; - } - if (workingHours.from === '' || isValidOneTime(workingHours.from.split(':'))) { +function findTime(schedule, workingHours) { + var workSchedule = addBankTime(workingHours); - return false; - } - - return true; -} - -function isValidOneTime(time) { - var timeZone = parseInt(time[1].split('+')[1]); - time[0] = parseInt(time[0]); - time[1] = parseInt(time[1].split('+')[0]); - if (time[0] < 0 || time[0]> 23 || time[1] < 0 || time[1]> 59 || timeZone> 24) { - - return true; - } - - return false; -} - -function getTimeZone(workingHours) { - var timeZoneBank = workingHours.from !== undefined ? Number(workingHours.from - .split('+')[1]) : 0; - - return timeZoneBank; + return addSheduleTime(schedule, workingHours, workSchedule); } function addBankTime(workingHours) { @@ -124,21 +68,28 @@ function addBankTime(workingHours) { return false; } } - addBankDays(dateArray); - return true; + return addBankDays(dateArray); +} + +function getTimeZone(workingHours) { + var timeZoneBank = workingHours.from !== undefined ? Number(workingHours.from + .split('+')[1]) : 0; + + return timeZoneBank; } function addBankDays(dateArray) { - timeForWork.mon[0].dateFrom = dateArray[0]; - timeForWork.mon[0].dateTo = dateArray[3]; - timeForWork.tue[0].dateFrom = dateArray[1]; - timeForWork.tue[0].dateTo = dateArray[4]; - timeForWork.wed[0].dateFrom = dateArray[2]; - timeForWork.wed[0].dateTo = dateArray[5]; + var bankSchedule = []; + for (var i = 0; i < 3; i++) { + bankSchedule.push({ 'dateFrom': dateArray[i], 'dateTo': dateArray[i + 3] }); + } + + return bankSchedule; } -function addSheduleTime(schedule, workingHours) { +function addSheduleTime(schedule, workingHours, oldWorkSchedule) { + var workSchedule = oldWorkSchedule; var keys = []; for (var key in schedule) { if ({}.hasOwnProperty.call(schedule, key)) { @@ -148,11 +99,11 @@ function addSheduleTime(schedule, workingHours) { for (var j = 0; j < keys.length; j++) { for (var i = 0; i < schedule[keys[j]].length; i++) { correctionSchedule(schedule[keys[j]][i], getTimeZone(workingHours)); - changeTimeForWork(schedule[keys[j]][i].from, schedule[keys[j]][i].to); + changeTimeForWork(schedule[keys[j]][i].from, schedule[keys[j]][i].to, workSchedule); } } - return true; + return workSchedule; } function correctionSchedule(interval, timeZone) { @@ -192,27 +143,22 @@ function getDay(string) { } } -function changeTimeForWork(from, to) { +function changeTimeForWork(from, to, workSchedule) { if (from.getTime() === to.getTime() || from> to) { return false; } - for (var key in timeForWork) { - if (!({}.hasOwnProperty.call(timeForWork, key))) { - return false; - } - for (var i = 0; i < timeForWork[key].length; i++) { - calculateTime(from, to, key, i); - } + for (var i = 0; i < workSchedule.length; i++) { + calculateTime(from, to, i, workSchedule); } return true; } -function calculateTime(from, to, key, i) { +function calculateTime(from, to, i, workSchedule) { var set = 0; - var dateFrom = timeForWork[key][i].dateFrom; - var dateTo = timeForWork[key][i].dateTo; + var dateFrom = workSchedule[i].dateFrom; + var dateTo = workSchedule[i].dateTo; var newTime = []; if (from>= dateFrom && from <= dateTo) { newTime.push({ 'dateFrom': dateFrom, 'dateTo': from }); @@ -223,54 +169,41 @@ function calculateTime(from, to, key, i) { set++; } if (to> dateTo && from < dateFrom) { - changeTime(key, -2, dateFrom); + changeTime(-2, dateFrom, workSchedule); return true; } if (set !== 0) { - changeTime(key, i, newTime, set); + changeTime(i, newTime, set, workSchedule); } } -function changeTime(key, i, newTime, set) { +function changeTime(i, newTime, set, workSchedule) { if (i === -2) { - timeForWork[key].splice(0, timeForWork[key].length); - timeForWork[key].push({ 'dateFrom': newTime, 'dateTo': newTime }); + workSchedule.splice(0, workSchedule.length); + workSchedule.push({ 'dateFrom': newTime, 'dateTo': newTime }); return true; } - timeForWork[key].splice(i, 1); + workSchedule.splice(i, 1); for (var j = set; j> 0; j--) { - timeForWork[key].splice(i, 0, newTime[j - 1]); + workSchedule.splice(i, 0, newTime[j - 1]); } return true; } -function getTime(duration) { - for (var key in timeForWork) { - if (!({}.hasOwnProperty.call(timeForWork, key))) { - - return false; - } - - if (calculateGetTime(key, duration)) { - - return calculateGetTime(key, duration); - } +function getTime(duration, workSchedule) { + if (typeof (workSchedule) === 'undefined') { + return false; } - - return false; -} -function calculateGetTime(key, duration) { - - for (var i = 0; i < timeForWork[key].length; i++) { - if ((timeForWork[key][i].dateTo - timeForWork[key][i].dateFrom)>= duration) { - var inform = [key, i]; - inform.push(DAYS[timeForWork[key][i].dateTo.getDay() - 1]); - var time = [timeForWork[key][i].dateFrom.getHours()]; - time.push(timeForWork[key][i].dateFrom.getMinutes()); + for (var i = 0; i < workSchedule.length; i++) { + if ((workSchedule[i].dateTo - workSchedule[i].dateFrom)>= duration) { + var inform = [i]; + inform.push(DAYS[workSchedule[i].dateTo.getDay() - 1]); + var time = [workSchedule[i].dateFrom.getHours()]; + time.push(workSchedule[i].dateFrom.getMinutes()); inform.push(time[0], time[1]); return inform; @@ -285,69 +218,53 @@ function normalizeMinAndHour(array) { return false; } - var normalArray = [array[0], array[1], array[2]]; + var normalArray = [array[0], array[1]]; + if (array[2] < 10) { + normalArray.push('0' + array[2]); + } else { + normalArray.push(array[2]); + } if (array[3] < 10) { normalArray.push('0' + array[3]); } else { normalArray.push(array[3]); } - if (array[4] < 10) { - normalArray.push('0' + array[4]); - } else { - normalArray.push(array[4]); - } return normalArray; } -function getTimeLater(duration) { - if (typeof(goodTime) === 'boolean' || goodTime.length !== 5) { +function getTimeLater(duration, timeForWork, goodTime) { + if (typeof goodTime === 'undefined' || goodTime.length !== 4) { return false; } - var dateForCheck = timeForWork[goodTime[0]][goodTime[1]].dateFrom; - transferLate(dateForCheck, goodTime[0], goodTime[1]); - timeForWork[goodTime[0]][goodTime[1]].dateFrom.setMinutes(dateForCheck.getMinutes() + 30); - if (getTime(duration) === false) { - timeForWork[goodTime[0]][goodTime[1]].dateFrom = dateForCheck; + var dateForCheck = timeForWork[goodTime[0]].dateFrom; + var scheduleToTry = transferLate(dateForCheck, goodTime[0], timeForWork); + if (getTime(duration, scheduleToTry) === false) { + timeForWork[goodTime[0]].dateFrom = dateForCheck; return false; } - goodTime = normalizeMinAndHour(getTime(duration)); - return getTime(duration); + return normalizeMinAndHour(getTime(duration, scheduleToTry)); } -function transferLate(dateForCheck, day, num) { +function transferLate(dateForCheck, num, timeForWork) { var a = dateForCheck; var b = new Date(a); b.setMinutes(b.getMinutes() + 30); - if (timeForWork[day][num + 1] !== undefined && b> timeForWork[day][num + 1].dateFrom) { - addBusyLate(day, (num + 1), b.valueOf()); - } - if (a.getDay() !== b.getDay()) { - addBusyLate(getKey(b.getDay()), 0, b.valueOf()); + if (timeForWork[num + 1] !== undefined && b> timeForWork[num + 1].dateFrom) { + return addBusyLate((num + 1), b.valueOf(), timeForWork); } + timeForWork[num].dateFrom = b; - return a; + return timeForWork; } -function getKey(day) { - switch (day) { - case 2: - - return 'tue'; - case 3: - - return 'wed'; - default: - - return 0; +function addBusyLate(num, value, timeForWork) { + if (timeForWork[num].dateFrom.valueOf() < value) { + timeForWork[num].dateFrom = new Date(value); } -} -function addBusyLate(day, num, value) { - if (timeForWork[day][num].dateFrom.valueOf() < value) { - timeForWork[day][num].dateFrom = new Date(value); - } + return timeForWork; } From 630f3eb15654379d7058851a5f0935e870fccfdf Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 6 Nov 2016 18:26:57 +0500 Subject: [PATCH 65/66] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 86 +++++++++++++++++++++++------------------------------- 1 file changed, 37 insertions(+), 49 deletions(-) diff --git a/robbery.js b/robbery.js index 58a21be..02f25e2 100644 --- a/robbery.js +++ b/robbery.js @@ -2,6 +2,7 @@ exports.isStar = true; var DAYS = ['ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС']; +var TRANSFER_TIME = 30; exports.getAppropriateMoment = function (schedule, duration, workingHours) { console.info(schedule, duration, workingHours); @@ -56,52 +57,41 @@ function findTime(schedule, workingHours) { } function addBankTime(workingHours) { - var open = workingHours.from.split(':'); - var close = workingHours.to.split(':'); + var bankSchedule = []; + var intOpenHour = parseInt(workingHours.from.split(':')[0], 10); + var intOpenMinute = parseInt(workingHours.from.split(':')[1][0], 10); + var intCloseHour = parseInt(workingHours.to.split(':')[0], 10); + var intCloseMinute = parseInt(workingHours.to.split(':')[1].split('+')[0], 10); var dateArray = []; for (var i = 0; i < 3; i++) { - var intHour = parseInt(close[0]); - dateArray[i] = new Date(2016, 9, (i + 24), parseInt(open[0]), parseInt(open[1])); - dateArray[i + 3] = new Date(2016, 9, (i + 24), intHour, parseInt(close[1].split('+')[0])); + dateArray[i] = new Date(2016, 9, (i + 24), intOpenHour, intOpenMinute); + dateArray[i + 3] = new Date(2016, 9, (i + 24), intCloseHour, intCloseMinute); if (dateArray[i]> dateArray[i + 3] || !getTimeZone(workingHours)) { return false; } + bankSchedule.push({ 'dateFrom': dateArray[i], 'dateTo': dateArray[i + 3] }); } - return addBankDays(dateArray); + return bankSchedule; } function getTimeZone(workingHours) { - var timeZoneBank = workingHours.from !== undefined ? Number(workingHours.from - .split('+')[1]) : 0; + var timeZone = Number(workingHours.from.split('+')[1]); + var timeZoneBank = workingHours.from !== undefined ? timeZone : 0; return timeZoneBank; } -function addBankDays(dateArray) { - var bankSchedule = []; - for (var i = 0; i < 3; i++) { - bankSchedule.push({ 'dateFrom': dateArray[i], 'dateTo': dateArray[i + 3] }); - } - - return bankSchedule; -} - function addSheduleTime(schedule, workingHours, oldWorkSchedule) { var workSchedule = oldWorkSchedule; - var keys = []; - for (var key in schedule) { - if ({}.hasOwnProperty.call(schedule, key)) { - keys.push(key); - } - } - for (var j = 0; j < keys.length; j++) { - for (var i = 0; i < schedule[keys[j]].length; i++) { - correctionSchedule(schedule[keys[j]][i], getTimeZone(workingHours)); - changeTimeForWork(schedule[keys[j]][i].from, schedule[keys[j]][i].to, workSchedule); - } - } + var keys = Object.keys(schedule); + keys.forEach(function (keyValue) { + schedule[keyValue].forEach(function (interval) { + correctionSchedule(interval, getTimeZone(workingHours)); + changeTimeForWork(interval.from, interval.to, workSchedule); + }); + }); return workSchedule; } @@ -109,15 +99,15 @@ function addSheduleTime(schedule, workingHours, oldWorkSchedule) { function correctionSchedule(interval, timeZone) { for (var key in interval) { if (typeof(interval[key]) === 'object' || !timeZone || parseInt(interval[key] - .split('+')[1])> 24) { - + .split('+')[1], 10)> 24) { return false; } var day = getDay(interval[key].substr(0, 2)); - var corrective = timeZone - parseInt(interval[key].split('+')[1], 10); + var menTimeZone = parseInt(interval[key].split('+')[1], 10); + var corrective = timeZone - menTimeZone; var hour = parseInt(interval[key].substr(3, 2), 10) + corrective; - interval[key] = new Date (2016, 9, day, hour, parseInt(interval[key].substr(6, 2), 10)); - + var minute = parseInt(interval[key].substr(6, 2), 10); + interval[key] = new Date (2016, 9, day, hour, minute); } return true; @@ -126,19 +116,14 @@ function correctionSchedule(interval, timeZone) { function getDay(string) { switch (string) { case 'ПН': - return 24; case 'ВТ': - return 25; case 'СР': - return 26; case 'ЧТ': - return 27; default: - return 38; } } @@ -155,10 +140,10 @@ function changeTimeForWork(from, to, workSchedule) { return true; } -function calculateTime(from, to, i, workSchedule) { +function calculateTime(from, to, intervalNum, workSchedule) { var set = 0; - var dateFrom = workSchedule[i].dateFrom; - var dateTo = workSchedule[i].dateTo; + var dateFrom = workSchedule[intervalNum].dateFrom; + var dateTo = workSchedule[intervalNum].dateTo; var newTime = []; if (from>= dateFrom && from <= dateTo) { newTime.push({ 'dateFrom': dateFrom, 'dateTo': from }); @@ -169,25 +154,28 @@ function calculateTime(from, to, i, workSchedule) { set++; } if (to> dateTo && from < dateFrom) { - changeTime(-2, dateFrom, workSchedule); + changeTime(-1, dateFrom, workSchedule); return true; } if (set !== 0) { - changeTime(i, newTime, set, workSchedule); + changeTime(intervalNum, newTime, set, workSchedule); } } -function changeTime(i, newTime, set, workSchedule) { - if (i === -2) { +// @param {number} intervalNum - номер отрезка свободного времени +// передаётся -1 в случае, когда отрезок разбивается на 2, а не отсекается край + +function changeTime(intervalNum, newTime, set, workSchedule) { + if (intervalNum === -1) { workSchedule.splice(0, workSchedule.length); workSchedule.push({ 'dateFrom': newTime, 'dateTo': newTime }); return true; } - workSchedule.splice(i, 1); + workSchedule.splice(intervalNum, 1); for (var j = set; j> 0; j--) { - workSchedule.splice(i, 0, newTime[j - 1]); + workSchedule.splice(intervalNum, 0, newTime[j - 1]); } return true; @@ -252,7 +240,7 @@ function getTimeLater(duration, timeForWork, goodTime) { function transferLate(dateForCheck, num, timeForWork) { var a = dateForCheck; var b = new Date(a); - b.setMinutes(b.getMinutes() + 30); + b.setMinutes(b.getMinutes() + TRANSFER_TIME); if (timeForWork[num + 1] !== undefined && b> timeForWork[num + 1].dateFrom) { return addBusyLate((num + 1), b.valueOf(), timeForWork); } From 1782100692b5ccbde7fe37455f6a10a2aac26430 Mon Sep 17 00:00:00 2001 From: Zeace Date: 2016年11月11日 11:47:07 +0500 Subject: [PATCH 66/66] =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20JSDoc+=D0=BD=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 159 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 136 insertions(+), 23 deletions(-) diff --git a/robbery.js b/robbery.js index 02f25e2..75548cd 100644 --- a/robbery.js +++ b/robbery.js @@ -3,20 +3,38 @@ exports.isStar = true; var DAYS = ['ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС']; var TRANSFER_TIME = 30; - +var ONE_MINUTE = 60000; +var DAY_FOR_ROBBERY = 3; + +/** + * @param {Object} schedule – Расписание Банды + * @param {Number} duration - Время на ограбление в минутах + * @param {Object} workingHours – Время работы банка + * @returns {Object} + */ exports.getAppropriateMoment = function (schedule, duration, workingHours) { console.info(schedule, duration, workingHours); - var timeForWork = findTime(schedule, workingHours, duration); - - var goodTime = normalizeMinAndHour(getTime(duration * 60000, timeForWork)); + var timeForWork = findTime(schedule, workingHours); + var goodTime = normalizeMinAndHour(getTime(duration * ONE_MINUTE, timeForWork)); return { + /** + * Найдено ли время + * @returns {Boolean} + */ exists: function () { return typeof (goodTime) === 'object'; }, + /** + * Возвращает отформатированную строку с часами для ограбления + * Например, + * "Начинаем в %HH:%MM (%DD)" -> "Начинаем в 14:59 (СР)" + * @param {String} template + * @returns {String} + */ format: function (template) { if (!this.exists()) { @@ -26,20 +44,25 @@ exports.getAppropriateMoment = function (schedule, duration, workingHours) { return ''; } - template = template.replace(/(%DD)/g, goodTime[1]); - template = template.replace(/(%HH)/g, goodTime[2]); - template = template.replace(/(%MM)/g, goodTime[3]); + template = template.replace(/(%DD)/g, goodTime[1]) + .replace(/(%HH)/g, goodTime[2]) + .replace(/(%MM)/g, goodTime[3]); return template; }, + /** + * Попробовать найти часы для ограбления позже [*] + * @star + * @returns {Boolean} + */ tryLater: function () { var oldGoodTime = goodTime; if (!this.exists()) { return false; } - if ((goodTime = getTimeLater(duration * 60000, timeForWork, goodTime))) { + if ((goodTime = getTimeLater(duration * ONE_MINUTE, timeForWork, goodTime))) { return true; } @@ -50,32 +73,51 @@ exports.getAppropriateMoment = function (schedule, duration, workingHours) { }; }; +/** + * Поиск подходящего времени + * @param {Object} schedule – Расписание Банды + * @param {Object} workingHours – Время работы банка + * @returns {Object} + */ function findTime(schedule, workingHours) { var workSchedule = addBankTime(workingHours); return addSheduleTime(schedule, workingHours, workSchedule); } +/** + * Поиск подходящего времени + * @param {Object} workingHours – Время работы банка + * @returns {Object} bankSchedule - Время работы банка в допустимые дни + */ function addBankTime(workingHours) { var bankSchedule = []; var intOpenHour = parseInt(workingHours.from.split(':')[0], 10); var intOpenMinute = parseInt(workingHours.from.split(':')[1][0], 10); var intCloseHour = parseInt(workingHours.to.split(':')[0], 10); var intCloseMinute = parseInt(workingHours.to.split(':')[1].split('+')[0], 10); - var dateArray = []; - for (var i = 0; i < 3; i++) { - dateArray[i] = new Date(2016, 9, (i + 24), intOpenHour, intOpenMinute); - dateArray[i + 3] = new Date(2016, 9, (i + 24), intCloseHour, intCloseMinute); - if (dateArray[i]> dateArray[i + 3] || !getTimeZone(workingHours)) { + var from = 0; + var to = 0; + for (var i = 0; i < DAY_FOR_ROBBERY; i++) { + + // числа 9 и 24 взяты как ближайшая дата понедельника на момент написания + from = new Date(2016, 9, (i + 24), intOpenHour, intOpenMinute); + to = new Date(2016, 9, (i + 24), intCloseHour, intCloseMinute); + if (from> to || !getTimeZone(workingHours)) { return false; } - bankSchedule.push({ 'dateFrom': dateArray[i], 'dateTo': dateArray[i + 3] }); + bankSchedule.push({ 'dateFrom': from, 'dateTo': to }); } return bankSchedule; } +/** + * Получение часового пояса банка + * @param {Object} workingHours – Время работы банка + * @returns {Number} timeZoneBank - часовой пояс юанка + */ function getTimeZone(workingHours) { var timeZone = Number(workingHours.from.split('+')[1]); var timeZoneBank = workingHours.from !== undefined ? timeZone : 0; @@ -83,6 +125,13 @@ function getTimeZone(workingHours) { return timeZoneBank; } +/** + * Получение всех отрезов времени, когда возможно ограбление + * @param {Object} schedule – Расписание Банды + * @param {Object} workingHours – Время работы банка + * @param {Object} oldWorkSchedule - Расписание банка в доступные дни + * @returns {Object} workSchedule - Все отрезки свободного времени в часы работы банка + */ function addSheduleTime(schedule, workingHours, oldWorkSchedule) { var workSchedule = oldWorkSchedule; var keys = Object.keys(schedule); @@ -96,6 +145,12 @@ function addSheduleTime(schedule, workingHours, oldWorkSchedule) { return workSchedule; } +/** + * Приведение отрезка свободного времени к часовому поясу банка + * @param {Object} interval – Отрезок свободного времени члена банды + * @param {Number} timeZone – Часовой пояс банка + * @returns {Boolean} + */ function correctionSchedule(interval, timeZone) { for (var key in interval) { if (typeof(interval[key]) === 'object' || !timeZone || parseInt(interval[key] @@ -113,6 +168,11 @@ function correctionSchedule(interval, timeZone) { return true; } +/** + * Получение всех отрезов времени, когда возможно ограбление + * @param {String} string – День недели в двубуквенном формате + * @returns {Number} - дата, совпадающая с днём недели + */ function getDay(string) { switch (string) { case 'ПН': @@ -128,6 +188,13 @@ function getDay(string) { } } +/** + * Обрезка доступных отрезков свободного времени + * @param {Date} from – Начало отрезка занятости + * @param {Date} to – Конец отрезка занятости + * @param {Object} workSchedule - Текущее расписание свободного времени + * @returns {Boolean} + */ function changeTimeForWork(from, to, workSchedule) { if (from.getTime() === to.getTime() || from> to) { @@ -140,6 +207,13 @@ function changeTimeForWork(from, to, workSchedule) { return true; } +/** + * Обрезка доступных отрезков свободного времени + * @param {Date} from – Начало отрезка занятости + * @param {Date} to – Конец отрезка занятости + * @param {Number} intervalNum - номер редактируемого отрезка + * @param {Object} workSchedule - Текущее расписание свободного времени + */ function calculateTime(from, to, intervalNum, workSchedule) { var set = 0; var dateFrom = workSchedule[intervalNum].dateFrom; @@ -154,35 +228,46 @@ function calculateTime(from, to, intervalNum, workSchedule) { set++; } if (to> dateTo && from < dateFrom) { - changeTime(-1, dateFrom, workSchedule); + changeTime(-1, dateFrom, set, workSchedule); - return true; + return; } if (set !== 0) { changeTime(intervalNum, newTime, set, workSchedule); } } -// @param {number} intervalNum - номер отрезка свободного времени -// передаётся -1 в случае, когда отрезок разбивается на 2, а не отсекается край - +/** + * Изменение отрезков в расписании на новые + * @param {Number} intervalNum - номер редактируемого отрезка, + * передаётся -1 в случае, когда отрезок разбивается на 2, а не отсекается край + * @param {Array} newTime – новый отрезок + * @param {Number} set – количество редактируемых отрезков + * @param {Object} workSchedule - Текущее расписание свободного времени + */ function changeTime(intervalNum, newTime, set, workSchedule) { if (intervalNum === -1) { workSchedule.splice(0, workSchedule.length); workSchedule.push({ 'dateFrom': newTime, 'dateTo': newTime }); - return true; + return; } workSchedule.splice(intervalNum, 1); for (var j = set; j> 0; j--) { workSchedule.splice(intervalNum, 0, newTime[j - 1]); } - return true; + return; } +/** + * Поиск подходящего времени для ограбления + * @param {Number} duration - Время, необходимое на ограбление + * @param {Object} workSchedule - Текущее расписание подходящего времени + * @returns {Array} inform - Точка времени, подхадящая для ограбления + */ function getTime(duration, workSchedule) { - if (typeof (workSchedule) === 'undefined') { + if (!workSchedule) { return false; } @@ -201,9 +286,13 @@ function getTime(duration, workSchedule) { return false; } +/** + * Приведение часов и минут к двуциферному формату, например: 05 + * @param {Array} array - Массив, содержащий точку времени для ограбления + * @returns {Array} - Массив, приведённый к тербуему формату + */ function normalizeMinAndHour(array) { if (array === false) { - return false; } var normalArray = [array[0], array[1]]; @@ -221,6 +310,13 @@ function normalizeMinAndHour(array) { return normalArray; } +/** + * Поиск подходящего времени для ограбления + * @param {Number} duration - Время, необходимое на ограбление + * @param {Object} timeForWork - Текущее расписание подходящего времени + * @param {Array} goodTime - Точка времени, подхадящая для ограбления + * @returns {Array} - В случае успешного нахождения - новая точка времени для ограбления + */ function getTimeLater(duration, timeForWork, goodTime) { if (typeof goodTime === 'undefined' || goodTime.length !== 4) { @@ -237,10 +333,20 @@ function getTimeLater(duration, timeForWork, goodTime) { return normalizeMinAndHour(getTime(duration, scheduleToTry)); } +/** + * Поиск подходящего времени для ограбления + * @param {Date} dateForCheck - Точка времени, подхадящая для ограбления + * @param {Number} num - Номер отрезка для обрезания + * @param {Object} timeForWork - Текущее расписание подходящего времени + * @returns {Object} - Расписание, обрезанное на заданное время переноса если нашлось + * новое время, либо старое расписание + */ function transferLate(dateForCheck, num, timeForWork) { var a = dateForCheck; var b = new Date(a); b.setMinutes(b.getMinutes() + TRANSFER_TIME); + + // проверка следующего свободного отрезка времени для ограбления if (timeForWork[num + 1] !== undefined && b> timeForWork[num + 1].dateFrom) { return addBusyLate((num + 1), b.valueOf(), timeForWork); } @@ -249,6 +355,13 @@ function transferLate(dateForCheck, num, timeForWork) { return timeForWork; } +/** + * Поиск подходящего времени для ограбления + * @param {Number} num - Номер отрезка для обрезания + * @param {Number} value - Точка времени для ограбления, после переноса в мс + * @param {Object} timeForWork - Текущее расписание подходящего времени + * @returns {Object} Расписание, обрезанное на заданное время переноса + */ function addBusyLate(num, value, timeForWork) { if (timeForWork[num].dateFrom.valueOf() < value) { timeForWork[num].dateFrom = new Date(value);

AltStyle によって変換されたページ (->オリジナル) /