├── README.md └── stringTime.js /README.md: -------------------------------------------------------------------------------- 1 | # stringTime.js - Библиотека для работы с временем в строковом формате 2 | Все функции имеют подробную документацию написанную на JSDoc с примерами использования функций и описанием всех параметров и возвращаемых значений. 3 | 4 | ## Всего 10 Функции (225 строк кода) 5 | ### 2 вспомогательные функции 6 | 1. Проверка на число 7 | >isNumber(n) 8 | 9 | 2. Случайное число в диапазоне от min до max 10 | >randomInteger(min, max) 11 | 12 | ### 8 функций для работы с временем 13 | 1. Функция преобразует время в минуты. 14 | >timeToMinute(time) 15 | 16 | 2. Функция преобразует минуты в строку с временем. 17 | >minuteToTime(min) 18 | 19 | 3. Функция добавляет/вычитает из строки с временем время в минутах. 20 | >timeDivMinute(time, change) 21 | 22 | 4. Функция вычитает или складывает две строки времени. 23 | >timeDivTime(time1, time2, operator) 24 | 25 | 5. Перевести строку в секунды или миллисекунды. 26 | >changeTypeTime(time, type) 27 | 28 | 6. Проверяет является ли аргумент временем 29 | >isTime(time) 30 | 31 | 7. Сравнивает две строки с временем 32 | >compareTime(time1, time2) 33 | 34 | 8. Возвращает правильное склонение для указанного числа 35 | если задать вопрос: какое количество секунд, минут, часов, дней, недель, месяцев или лет? 36 | >decOfNum(num, type) 37 | 38 | ### Литература: 39 | 1. JSDoc 40 | 2. Перехват ошибок 41 | 3. Обработка ошибок 42 | 43 | 44 | ### Исмаил Усеинов: 45 | * __YouTube канал ITDoctor:__ https://www.youtube.com/c/ITDoctor 46 | * __Телеграм:__ https://t.me/itdoctorstudio 47 | * __Группа в ВК:__ https://vk.com/itdoctorstudio 48 | -------------------------------------------------------------------------------- /stringTime.js: -------------------------------------------------------------------------------- 1 | //Месеца 2 | const month = ["", "января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"]; 3 | //Месяца в именительном падеже 4 | const monthIp = ["", "январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь"]; 5 | //Форматирование времени 6 | const options = { hour: 'numeric', minute: 'numeric' }; 7 | 8 | ////Математические функции//// 9 | /** 10 | * Проверка на число 11 | * @param {number} n любое число или строка 12 | * @return {boolean} возвращает true если аргумент является числом, в противном случае false 13 | */ 14 | function isNumber(n) { 15 | return !isNaN(parseFloat(n)) && !isNaN(n - 0) 16 | } 17 | /** 18 | * Случайное число в диапазоне от min до max 19 | * @param {number} min минимальное число 20 | * @param {number} max максимальное число 21 | * @return {number} случайное число в указанном диапазоне 22 | */ 23 | function randomInteger(min, max) { 24 | // случайное число от min до (max+1) 25 | let rand = min + Math.random() * (max + 1 - min); 26 | return Math.floor(rand); 27 | } 28 | 29 | ////Функции по работе с временем//// 30 | 31 | /** 32 | * Функция преобразует время в минуты. 33 | * @param {string} time время в виде строки, например "02:08". Может быть в диапазоне от "00:00" до "23:59". 34 | * @return {number} целое число в минутах. Например time="02:08" вернет 128. 35 | */ 36 | function timeToMinute(time) { 37 | try { 38 | let hour = +time.split(":")[0]//часы 39 | let minute = +time.split(":")[1]//минуты 40 | //Ошибка диапазона аргумента или его типа 41 | if(!(hour>=0 && hour<=23) || !(minute>=0 && minute<=59)) 42 | throw new RangeError("Аргумент должент быть в формате 'hh:mm' - 'hh' должен быть от 0 до 23, а 'mm' должен быть от 0 до 59. 'hh' и 'mm' должны быть числами и разделяться знаком ':'") 43 | //Возвращаем результат если ошибок нет 44 | return hour*60+minute 45 | } catch(e) { 46 | //Если ошибка была, то выводим в консоль сообщение 47 | console.log(e) 48 | } 49 | } 50 | 51 | /** 52 | * Функция преобразует минуты в строку с временем. 53 | * @param {number} min время в виде целого числа, например 62. Может быть отрицательным числом. 54 | * @return {string} время в виде строки. Например min=62 вернет "01:02", 55 | * min=-5 вернет "23:55", min=1439 вернет "23:59", min=1440 вернет "00:00", min=2882 вернет "00:02". 56 | */ 57 | function minuteToTime(min) { 58 | try { 59 | let h, m, s 60 | //Ошибка типа аргумента 61 | if (!isNumber(min)) { 62 | throw new TypeError("Аргумент функции должен быть числом") 63 | } 64 | if (min < 0 || min > 1439) { 65 | let newMinute = min 66 | //-60 станет 1380 (-1 час = 23 часа) 67 | if (min < 0) { 68 | newMinute = min + (Math.trunc(Math.abs(min) / 1440) + 1) * 1440 69 | } 70 | let tmpHour = Math.trunc(newMinute / 60) 71 | let tmpMinute = newMinute % 60 72 | h = tmpHour % 24 + "" 73 | m = Math.trunc(tmpMinute % 60) + "" 74 | s = Math.trunc((tmpMinute % 60 - Math.trunc(tmpMinute % 60)) * 60) + "" 75 | } else { 76 | h = Math.trunc(min / 60) + "" 77 | m = Math.trunc(min % 60) + "" 78 | s = Math.trunc((min % 60 - Math.trunc(min % 60)) * 60) + "" 79 | } 80 | if (h.length === 1) h = "0" + h 81 | if (m.length === 1) m = "0" + m 82 | if (s.length === 1) s = "0" + s 83 | return h + ":" + m// + ":" + s 84 | } catch (e) { 85 | //Если ошибка была, то выводим в консоль сообщение 86 | console.log(e) 87 | } 88 | } 89 | 90 | /** 91 | * Функция добавляет/вычитает из строки с временем время в минутах. 92 | * @param {string} time время в виде строки, например "02:08". 93 | * @param {number} change сколько минут добавить. Если отрицательное число, то вычесть. 94 | * @return {string} время в виде строки. Например time="00:02" change=-5 вернет "23:57". 95 | */ 96 | function timeDivMinute(time, change) { 97 | return minuteToTime(timeToMinute(time)+change) 98 | } 99 | 100 | /** 101 | * Функция вычитает или складывает две строки времени. 102 | * @param {string} time1 время в виде строки, например "02:08". 103 | * @param {string} time2 время в виде строки, например "01:03". 104 | * @param {string} operator сложить строки "+", вычесть строки "-" 105 | * @return {string} время в виде строки. Например time1="02:02" time2="01:01" operator="-" вернет "01:01". 106 | */ 107 | function timeDivTime(time1, time2, operator) { 108 | if(operator==="-") 109 | return minuteToTime(timeToMinute(time1)-timeToMinute(time2)) 110 | if(operator==="+") 111 | return minuteToTime(timeToMinute(time1)+timeToMinute(time2)) 112 | } 113 | 114 | /** 115 | * Перевести строку в секунды или миллисекунды. 116 | * @param {string} time время в виде строки, например "00:01". 117 | * @param {string} type может быть "s" для перевода в секунды и "ms" для перевода в миллисекунды. 118 | * @return {number} число секунд или миллисекунд. Например time="00:01" type="s" вернет 60. 119 | */ 120 | function changeTypeTime(time, type) { 121 | if(type==="s") 122 | return timeToMinute(time)*60 123 | if(type==="ms") 124 | return timeToMinute(time)*60*1000 125 | } 126 | 127 | /** 128 | * Проверяет является ли аргумент временем 129 | * @param {string} time строка времени типа "01:26" 130 | * @return {boolean} true или false 131 | */ 132 | function isTime(time) { 133 | return isNumber(+time[0]) 134 | && isNumber(+time[1]) 135 | && time[2]==":" 136 | && isNumber(+time[3]) 137 | && isNumber(+time[4]) 138 | } 139 | 140 | /** 141 | * Сравнивает две строки с временем 142 | * @param {string} time1 первая строка с временем 143 | * @param {string} time2 вторая строка с временем 144 | * @return {number} 1 если первый аргумент больше второго, -1 если первый аргумент меньше второго, 0 если аргументы равны 145 | */ 146 | function compareTime(time1, time2) { 147 | let timeStr1 = timeToMinute(time1) 148 | let timeStr2 = timeToMinute(time2) 149 | if(timeStr1>timeStr2) return 1 150 | else if(timeStr1=2 && num[num.length-1]==5) || 200 | (num.length>=2 && num[num.length-1]==6) || 201 | (num.length>=2 && num[num.length-1]==7) || 202 | (num.length>=2 && num[num.length-1]==8) || 203 | (num.length>=2 && num[num.length-1]==9) || 204 | (num.length>=2 && num[num.length-1]==0) || 205 | (num.length>=2 && num[num.length-2]==1) || 206 | num==5 || num==6 || num==7 || num==8 || num==9 || num==0 207 | ) 208 | return num+" "+text[tmpType][2] 209 | //Для чисел 2, 3 или 4 210 | //Для чисел состоящих из более двух цифр, у которых предпоследняя цифра не равна 1, а последняя цифра равна 2, 3 или 4 (например: 22 минуты, 234 часа, 6423 месяца) 211 | if( 212 | (num.length>=2 && num[num.length-1]==2 && num[num.length-2]!==1) || 213 | (num.length>=2 && num[num.length-1]==3 && num[num.length-2]!==1) || 214 | (num.length>=2 && num[num.length-1]==4 && num[num.length-2]!==1) || 215 | num==2 || num==3 || num==4 216 | ) 217 | return num+" "+text[tmpType][1] 218 | //Для числа 1 219 | //Для чисел состоящих из более двух цифр, у которых предпоследняя цифра не равна 1, а последняя цифра равна 1 (например: 21 год, 631 день, 48251 секунда) 220 | if( 221 | (num.length>=2 && num[num.length-1]==1 && num[num.length-2]!==1) || 222 | num==1 223 | ) 224 | return num+" "+text[tmpType][0] 225 | } --------------------------------------------------------------------------------