From 0e5b39678d442c35d887c50f37a703688f8d1715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Sun, 8 Dec 2024 20:33:13 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F=D1=86=D0=B8=D1=8E,=20?= =?UTF-8?q?=D0=B4=D0=B7=205.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 3 +- js/data.js | 127 +++++++++++++++++++++++++++++++++++++ js/function.js | 65 ------------------- js/functions.js | 65 ------------------- js/main.js | 162 ++---------------------------------------------- js/util.js | 28 +++++++++ 6 files changed, 161 insertions(+), 289 deletions(-) create mode 100644 js/data.js delete mode 100644 js/function.js delete mode 100644 js/functions.js create mode 100644 js/util.js diff --git a/index.html b/index.html index a179d2f..1b0290d 100644 --- a/index.html +++ b/index.html @@ -233,7 +233,6 @@

Изображение успешно загруже

Не удалось загрузить данные

- - + diff --git a/js/data.js b/js/data.js new file mode 100644 index 0000000..c4dc7d6 --- /dev/null +++ b/js/data.js @@ -0,0 +1,127 @@ +import { + getRandomInt, + getRandomUniqueInt, + getRandomArrElement +} from './util.js'; + +const OBJECT_QTY = 25; + +const IdPhotoRange = { + MIN: 1, + MAX: 25, +}; + +const IdMessageRange = { + MIN: 1, + MAX: 1111, +}; + +const UrlRange = { + MIN: 1, + MAX: 25, +}; + +const LikesRange = { + MIN: 15, + MAX: 200, +}; + +const CommentsRange = { + MIN: 0, + MAX: 30, +}; + +const MessageRange = { + MIN: 1, + MAX: 2, +}; + +const AvatarRange = { + MIN: 1, + MAX: 6, +}; + +const DESCRIPTION = [ + "Закат на берегу моря", + "Старинная улочка европейского города", + "Котенок спит на кровати", + "Заснеженные склоны Хибин", + "Букет цветов на столе", + "Велосипед пристегнутый на велопарковке", + "Чашка горячего кофе", + "Осенний парк с опавшей листвой", + "Маяк на скалистом берегу", + "Шмель на цветке", + "Деревенский домик в глухом лесу", + "Отражение звезд на поверхности Ладоги", + "Птенцы в гнезде", + "Радуга над зеленым полем после дождя", + "Следы на песчаном пляже", +]; + +const MESSAGE = [ + "Всё отлично!", + "В целом всё неплохо. Но не всё.", + "Когда вы делаете фотографию, хорошо бы убирать палец из кадра. В конце концов это просто непрофессионально.", + "Моя бабушка случайно чихнула с фотоаппаратом в руках и у неё получилась фотография лучше.", + "Я поскользнулся на банановой кожуре и уронил фотоаппарат на кота и у меня получилась фотография лучше.", + "Лица у людей на фотке перекошены, как будто их избивают. Как можно было поймать такой неудачный момент?!", +]; + +const AUTHOR_NAME = [ + "Довакин", + "Алдуин", + "Шеппард", + "Геральт", + "Супер Марио", + "Соник", + "Кратос", + "Солид Снейк", + "Клод Страйф", + "Лара Крофт", + "Наруто", + "Элли", + "Джоель", + "Сэм Фишер", +]; + +const getPhotoId = getRandomUniqueInt(IdPhotoRange.MIN, IdPhotoRange.MAX); + +const getRandomUrl = getRandomUniqueInt(UrlRange.MIN, UrlRange.MAX); + +const getMessageId = getRandomUniqueInt(IdMessageRange.MIN, IdMessageRange.MAX); + +const createComment = () => { + const messagesQty = []; + while ( + messagesQty.length < getRandomInt(MessageRange.MIN, MessageRange.MAX) + ) { + messagesQty.push(getRandomArrElement(MESSAGE)); + } + return { + id: getMessageId(), + avatar: `img/avatar-${getRandomInt(AvatarRange.MIN, AvatarRange.MAX)}.svg`, + message: messagesQty.join(" "), + name: getRandomArrElement(AUTHOR_NAME), + }; +}; + +const generateObj = () => { + const comments = Array.from( + { length: getRandomInt(CommentsRange.MIN, CommentsRange.MAX) }, + createComment + ); + return { + id: getPhotoId(), + url: `photos/${getRandomUrl()}.jpg`, + description: getRandomArrElement(DESCRIPTION), + likes: getRandomInt(LikesRange.MIN, LikesRange.MAX), + comments, + }; +}; + +const generateArrObj = () => Array.from({ length: OBJECT_QTY }, generateObj); + +export { + generateArrObj +}; diff --git a/js/function.js b/js/function.js deleted file mode 100644 index 150323e..0000000 --- a/js/function.js +++ /dev/null @@ -1,65 +0,0 @@ -const checkStringLength = (str, length) => str.length <= length; -console.log(checkStringLength('тестовая строка', 5)); - -function checkPalindrome(str) { - const normalizeStr = str.replaceAll(' ', '').toLowerCase(); - let emptyStr = ''; - for (let i = normalizeStr.length - 1; i >= 0; i--) { - emptyStr += normalizeStr[i]; - } - return normalizeStr === emptyStr; -} - -console.log('\n--- Тесты для palindromeChecker ---'); -console.log( - `Строка является палиндромом: ${checkPalindrome('топот') === true}` -); -console.log( - `Строка является палиндромом с разным регистром: ${ - checkPalindrome('ДовОд') === true - }` -); -console.log( - `Строка не является палиндромом: ${checkPalindrome('Кекс') === false}` -); -console.log( - `Строка является палиндромом: ${ - checkPalindrome('Лёша на полке клопа нашёл ') === true - }` -); - -function extractNumber (str) { - str = String(str); - let extractedStr = ''; - for (let i = 0; i <= str.length - 1; i++) { - const symbol = parseInt(str[i], 10); - if (!Number.isNaN(symbol)) { - extractedStr += symbol; - } - } - return Number(extractedStr) || NaN; -} - -console.log('\n--- Тесты для extractNumber---'); -console.log( - `Аргумент начинается с числа: ${extractNumber('2023 год') === 2023}` -); -console.log( - `Аргумент заканчивается на число: ${ - extractNumber('ECMAScript 2022') === 2022 - }` -); -console.log( - `Аргумент содержит несколько чисел, в том числе и с плавающей точкой: ${ - extractNumber('1 кефир, 0.5 батона') === 105 - }` -); -console.log( - `Аргумент заканчивается на число с нолями: ${ - extractNumber('агент 007') === 7 - }` -); -console.log(`Аргумент строка без чисел: ${isNaN(extractNumber('а я томат'))}`); -console.log(`Аргумент число: ${extractNumber(2023) === 2023}`); -console.log(`Аргумент отрицательное число: ${extractNumber(-1) === 1}`); -console.log(`Аргумент число с плавающей точкой: ${extractNumber(1.5) === 15}`); diff --git a/js/functions.js b/js/functions.js deleted file mode 100644 index 150323e..0000000 --- a/js/functions.js +++ /dev/null @@ -1,65 +0,0 @@ -const checkStringLength = (str, length) => str.length <= length; -console.log(checkStringLength('тестовая строка', 5)); - -function checkPalindrome(str) { - const normalizeStr = str.replaceAll(' ', '').toLowerCase(); - let emptyStr = ''; - for (let i = normalizeStr.length - 1; i >= 0; i--) { - emptyStr += normalizeStr[i]; - } - return normalizeStr === emptyStr; -} - -console.log('\n--- Тесты для palindromeChecker ---'); -console.log( - `Строка является палиндромом: ${checkPalindrome('топот') === true}` -); -console.log( - `Строка является палиндромом с разным регистром: ${ - checkPalindrome('ДовОд') === true - }` -); -console.log( - `Строка не является палиндромом: ${checkPalindrome('Кекс') === false}` -); -console.log( - `Строка является палиндромом: ${ - checkPalindrome('Лёша на полке клопа нашёл ') === true - }` -); - -function extractNumber (str) { - str = String(str); - let extractedStr = ''; - for (let i = 0; i <= str.length - 1; i++) { - const symbol = parseInt(str[i], 10); - if (!Number.isNaN(symbol)) { - extractedStr += symbol; - } - } - return Number(extractedStr) || NaN; -} - -console.log('\n--- Тесты для extractNumber---'); -console.log( - `Аргумент начинается с числа: ${extractNumber('2023 год') === 2023}` -); -console.log( - `Аргумент заканчивается на число: ${ - extractNumber('ECMAScript 2022') === 2022 - }` -); -console.log( - `Аргумент содержит несколько чисел, в том числе и с плавающей точкой: ${ - extractNumber('1 кефир, 0.5 батона') === 105 - }` -); -console.log( - `Аргумент заканчивается на число с нолями: ${ - extractNumber('агент 007') === 7 - }` -); -console.log(`Аргумент строка без чисел: ${isNaN(extractNumber('а я томат'))}`); -console.log(`Аргумент число: ${extractNumber(2023) === 2023}`); -console.log(`Аргумент отрицательное число: ${extractNumber(-1) === 1}`); -console.log(`Аргумент число с плавающей точкой: ${extractNumber(1.5) === 15}`); diff --git a/js/main.js b/js/main.js index 92fd087..a4497b4 100644 --- a/js/main.js +++ b/js/main.js @@ -1,158 +1,6 @@ -// Количество генерируемых объектов -const OBJECT_QTY = 25; +import { + generateArrObj +} from './data.js'; -// диапазон ID фото -const IdPhotoRange = { - MIN: 1, - MAX: 25 -}; - -// диапазон ID комментария -const IdMessageRange = { - MIN: 1, - MAX: 1111 -}; - -// диапазон URL фотографий -const UrlRange = { - MIN: 1, - MAX: 25 -}; - -// диапазон количества лайков -const LikesRange = { - MIN: 15, - MAX: 200 -}; - -// диапазон количества комментариев -const CommentsRange = { - MIN: 0, - MAX: 30 -}; - -// диапазон количества сообщений -const MessageRange = { - MIN: 1, - MAX: 2 - }; - -// Диапазон номера картинки для аватара -const AvatarRange = { - MIN: 1, - MAX: 6 -}; - -// Набор описаний фотографий -const DESCRIPTION = [ - "Закат на берегу моря", - "Старинная улочка европейского города", - "Котенок спит на кровати", - "Заснеженные склоны Хибин", - "Букет цветов на столе", - "Велосипед пристегнутый на велопарковке", - "Чашка горячего кофе", - "Осенний парк с опавшей листвой", - "Маяк на скалистом берегу", - "Шмель на цветке", - "Деревенский домик в глухом лесу", - "Отражение звезд на поверхности Ладоги", - "Птенцы в гнезде", - "Радуга над зеленым полем после дождя", - "Следы на песчаном пляже" -]; - -// Набор сообщений в комментариях -const MESSAGE = [ - "Всё отлично!", - "В целом всё неплохо. Но не всё.", - "Когда вы делаете фотографию, хорошо бы убирать палец из кадра. В конце концов это просто непрофессионально.", - "Моя бабушка случайно чихнула с фотоаппаратом в руках и у неё получилась фотография лучше.", - "Я поскользнулся на банановой кожуре и уронил фотоаппарат на кота и у меня получилась фотография лучше.", - "Лица у людей на фотке перекошены, как будто их избивают. Как можно было поймать такой неудачный момент?!" -]; - -// Имена авторов комментариев -const AUTHOR_NAME = [ - "Довакин", - "Алдуин", - "Шеппард", - "Геральт", - "Супер Марио", - "Соник", - "Кратос", - "Солид Снейк", - "Клод Страйф", - "Лара Крофт", - "Наруто", - "Элли", - "Джоель", - "Сэм Фишер" -]; - -// Функция получения случайного положительного числа -const getRandomInt = (min, max) => { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min + 1) + min); -}; - -// Функция получения уникального случайного положительного числа -const getRandomUniqueInt = (min, max) => { - const unAvailableInt = []; - return () => { - let currentInt = getRandomInt(min, max); - if (unAvailableInt.length >= (max - min + 1)) { - return null - } - while (unAvailableInt.includes(currentInt)) { - currentInt = getRandomInt(min, max) - }; - unAvailableInt.push(currentInt); - return currentInt - } -}; - -// Функция выбора случайного элемента массива -const getRandomArrElement = (array) => array[getRandomInt(0, array.length - 1)]; - -// Функция получения ID фото -const getPhotoId = getRandomUniqueInt(IdPhotoRange.MIN, IdPhotoRange.MAX); - -// Функция получения Url фото -const getRandomUrl = getRandomUniqueInt(UrlRange.MIN, UrlRange.MAX); - -// Функция получения ID комментария -const getMessageId = getRandomUniqueInt(IdMessageRange.MIN, IdMessageRange.MAX); - -// Функция создания комментария -const createComment = () => { - const messagesQty = []; - while (messagesQty.length < getRandomInt(MessageRange.MIN, MessageRange.MAX)) { - messagesQty.push(getRandomArrElement(MESSAGE)); - } - return { - id: getMessageId(), - avatar: `img/avatar-${getRandomInt(AvatarRange.MIN, AvatarRange.MAX)}.svg`, - message: messagesQty.join(' '), - name: getRandomArrElement(AUTHOR_NAME) - }; -}; - -// Функция генерирования объекта -const generateObj = () => { - const comments = Array.from({length: getRandomInt(CommentsRange.MIN, CommentsRange.MAX)}, createComment); - return { - id: getPhotoId(), - url: `photos/${getRandomUrl()}.jpg`, - description: getRandomArrElement(DESCRIPTION), - likes: getRandomInt(LikesRange.MIN, LikesRange.MAX), - comments - } - }; - - // Готовый массив сгенерированных объектов - const completeArr = Array.from({length: OBJECT_QTY}, generateObj); - - // Проверка с выводов в таблицу (удалить перед сдачей) - console.table(completeArr); +// Проверка вывода и работы. Удалить перед сдачей. +console.table(generateArrObj()); diff --git a/js/util.js b/js/util.js new file mode 100644 index 0000000..5dd824b --- /dev/null +++ b/js/util.js @@ -0,0 +1,28 @@ +const getRandomInt = (min, max) => { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min + 1) + min); +}; + +const getRandomUniqueInt = (min, max) => { + const unAvailableInt = []; + return () => { + let currentInt = getRandomInt(min, max); + if (unAvailableInt.length >= max - min + 1) { + return null; + } + while (unAvailableInt.includes(currentInt)) { + currentInt = getRandomInt(min, max); + } + unAvailableInt.push(currentInt); + return currentInt; + }; +}; + +const getRandomArrElement = (array) => array[getRandomInt(0, array.length - 1)]; + +export { + getRandomInt, + getRandomUniqueInt, + getRandomArrElement +}; From 0048100f7e8da84fc8241bacb6fffe021fedd1cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Sun, 8 Dec 2024 21:47:52 +0300 Subject: [PATCH 2/6] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B4=D0=B7=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D1=8E=D1=82?= =?UTF-8?q?=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 1 + js/functions.js | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 js/functions.js diff --git a/index.html b/index.html index 1b0290d..5bc8e48 100644 --- a/index.html +++ b/index.html @@ -234,5 +234,6 @@

Не удалось загрузить данны + diff --git a/js/functions.js b/js/functions.js new file mode 100644 index 0000000..c662706 --- /dev/null +++ b/js/functions.js @@ -0,0 +1,37 @@ +const getHours = (timeString) => Number(timeString.split(':')[0]); +const getMinutes = (timeString) => Number(timeString.split(':')[0]); + +const isWithinWorkingHours = (workdayStart, workdayEnd, meetingStart, meetingLength) => { + + // Получаем часы и минуты начала рабочего дня + let workdayStartHours = getHours(workdayStart); + let workdayStartMinutes = getMinutes(workdayStart); + + // Получаем часы и минуты конца рабочего дня + let workdayEndHours = getHours(workdayEnd); + let workdayEndMinutes = getMinutes(workdayEnd); + +// Получаем часы и минуты начала встречи + let meetingStartHours = getHours(meetingStart); + let meetingStartMinutes = getMinutes(meetingStart); + +// Получаем часы и минуты конца встречи + let meetingEndHours = meetingStartHours + Math.floor(meetingLength / 60); + let meetingEndMinutes = meetingStartMinutes + (meetingLength - meetingEndHours * 60); + if (meetingEndMinutes >= 60) { + meetingEndHours += 1; + meetingEndMinutes -= 60; + }; + + // Проверяем начало и конец встречи на выход за рабочий день + if ((workdayStartHours > meetingStartHours) || (workdayStartHours === meetingStartHours && workdayStartMinutes > meetingStartMinutes) || (workdayEndHours < meetingEndHours) || (workdayEndHours === meetingEndHours && workdayEndMinutes < meetingEndMinutes)) { + return false + }; + return true; +}; + +console.log(isWithinWorkingHours('08:00', '17:30', '14:00', 90)); +console.log(isWithinWorkingHours('8:0', '10:0', '8:0', 120)); +console.log(isWithinWorkingHours('08:00', '14:30', '14:00', 90)); +console.log(isWithinWorkingHours('14:00', '17:30', '08:0', 90)); +console.log(isWithinWorkingHours('8:00', '17:30', '08:00', 900)); From 5dfc4e2e33cec264d105e57e780393e7b24be841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Sun, 8 Dec 2024 21:54:09 +0300 Subject: [PATCH 3/6] =?UTF-8?q?=D0=B2=D0=BD=D0=B5=D1=81=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/functions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/functions.js b/js/functions.js index c662706..63efa00 100644 --- a/js/functions.js +++ b/js/functions.js @@ -1,5 +1,5 @@ const getHours = (timeString) => Number(timeString.split(':')[0]); -const getMinutes = (timeString) => Number(timeString.split(':')[0]); +const getMinutes = (timeString) => Number(timeString.split(':')[1]); const isWithinWorkingHours = (workdayStart, workdayEnd, meetingStart, meetingLength) => { From 0754536cb2cbf2e07a91c82ac1d6ae4fbb6be4af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Mon, 9 Dec 2024 14:43:43 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/functions.js | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/js/functions.js b/js/functions.js index 63efa00..f60e878 100644 --- a/js/functions.js +++ b/js/functions.js @@ -1,30 +1,21 @@ -const getHours = (timeString) => Number(timeString.split(':')[0]); -const getMinutes = (timeString) => Number(timeString.split(':')[1]); +const getTime = (timeString) => [Number(timeString.split(':')[0]), Number(timeString.split(':')[1])]; const isWithinWorkingHours = (workdayStart, workdayEnd, meetingStart, meetingLength) => { - // Получаем часы и минуты начала рабочего дня - let workdayStartHours = getHours(workdayStart); - let workdayStartMinutes = getMinutes(workdayStart); - - // Получаем часы и минуты конца рабочего дня - let workdayEndHours = getHours(workdayEnd); - let workdayEndMinutes = getMinutes(workdayEnd); - -// Получаем часы и минуты начала встречи - let meetingStartHours = getHours(meetingStart); - let meetingStartMinutes = getMinutes(meetingStart); - -// Получаем часы и минуты конца встречи - let meetingEndHours = meetingStartHours + Math.floor(meetingLength / 60); - let meetingEndMinutes = meetingStartMinutes + (meetingLength - meetingEndHours * 60); - if (meetingEndMinutes >= 60) { - meetingEndHours += 1; - meetingEndMinutes -= 60; + const workdayStartTime = getTime(workdayStart); + const workdayEndTime = getTime(workdayEnd); + const meetingStartTime = getTime(meetingStart); + const meetingDuration = [Math.floor(meetingLength / 60), meetingLength - Math.floor(meetingLength / 60) * 60] + const meetingEndTime = [meetingStartTime[0] + meetingDuration[0], meetingStartTime[1] + meetingDuration[1]] + if (meetingEndTime[1] >= 60) { + meetingEndTime[0] += 1; + meetingEndTime[1] -= 60; }; - - // Проверяем начало и конец встречи на выход за рабочий день - if ((workdayStartHours > meetingStartHours) || (workdayStartHours === meetingStartHours && workdayStartMinutes > meetingStartMinutes) || (workdayEndHours < meetingEndHours) || (workdayEndHours === meetingEndHours && workdayEndMinutes < meetingEndMinutes)) { + if ( + (workdayStartTime[0] > meetingStartTime[0]) || + (workdayStartTime[0] === meetingStartTime[0] && workdayStartTime[1] > meetingStartTime[1]) || + (workdayEndTime[0] < meetingEndTime[0]) || + (workdayEndTime[0] === meetingEndTime[0] && workdayEndTime[1] < meetingEndTime[1])) { return false }; return true; From 13685c7bbcfc3fec0c1ac90873685b0080c3611e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Mon, 9 Dec 2024 15:13:11 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/functions.js | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/js/functions.js b/js/functions.js index f60e878..803558b 100644 --- a/js/functions.js +++ b/js/functions.js @@ -1,24 +1,13 @@ -const getTime = (timeString) => [Number(timeString.split(':')[0]), Number(timeString.split(':')[1])]; - const isWithinWorkingHours = (workdayStart, workdayEnd, meetingStart, meetingLength) => { - - const workdayStartTime = getTime(workdayStart); - const workdayEndTime = getTime(workdayEnd); - const meetingStartTime = getTime(meetingStart); - const meetingDuration = [Math.floor(meetingLength / 60), meetingLength - Math.floor(meetingLength / 60) * 60] - const meetingEndTime = [meetingStartTime[0] + meetingDuration[0], meetingStartTime[1] + meetingDuration[1]] - if (meetingEndTime[1] >= 60) { - meetingEndTime[0] += 1; - meetingEndTime[1] -= 60; - }; - if ( - (workdayStartTime[0] > meetingStartTime[0]) || - (workdayStartTime[0] === meetingStartTime[0] && workdayStartTime[1] > meetingStartTime[1]) || - (workdayEndTime[0] < meetingEndTime[0]) || - (workdayEndTime[0] === meetingEndTime[0] && workdayEndTime[1] < meetingEndTime[1])) { - return false + const convertToMinutes = (timeString) => { + const [hours, minutes] = timeString.split(':').map(Number); + return hours * 60 + minutes; }; - return true; + const workdayStartMinutes = convertToMinutes(workdayStart); + const workdayEndMinutes = convertToMinutes(workdayEnd); + const meetingStartMinutes = convertToMinutes(meetingStart); + const meetingEndMinutes = meetingStartMinutes + meetingLength; + return meetingStartMinutes >= workdayStartMinutes && meetingEndMinutes <= workdayEndMinutes }; console.log(isWithinWorkingHours('08:00', '17:30', '14:00', 90)); From 1f45c63dbe74d059ab8ce238c6aa18de7575da6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Mon, 9 Dec 2024 15:19:41 +0300 Subject: [PATCH 6/6] fix --- js/functions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/functions.js b/js/functions.js index 803558b..2d46ec7 100644 --- a/js/functions.js +++ b/js/functions.js @@ -1,7 +1,7 @@ const isWithinWorkingHours = (workdayStart, workdayEnd, meetingStart, meetingLength) => { const convertToMinutes = (timeString) => { - const [hours, minutes] = timeString.split(':').map(Number); - return hours * 60 + minutes; + const [hours, minutes] = timeString.split(':'); + return (Number(hours) * 60) + Number(minutes) }; const workdayStartMinutes = convertToMinutes(workdayStart); const workdayEndMinutes = convertToMinutes(workdayEnd);