На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Расчет КВС (коэффициент возраста и стажа водителя) на JS



Сейчас работаю над одним новым интересным проектом – что-то типа сервиса для страховых и водителей. Сайт на Laravel 9, внутри несколько баз данных, интересные расчеты – в частности расчет ОСАГО. Для этого расчета требуется знать и получать несколько коэффициентов, и опять же в частности КВС (коэффициент возраста и стажа водителя). Вот ниже в заметке мы его и получим на JavaScript.

Сам коэффициент определяется исходя из двух параметров: возраста водителя (берется самый младший) и его стажа. Таблица ниже:



Таким образом, получается, что если мы будем иметь дату рождения водителя и дату начала его стажа, то разница с текущей датой и будут эти два параметра. Однако, тут надо не просто вычесть год из текущего, а поработать именно с датой. Функция получения разницы в годах (полных) между заданной датой и текущей

function getFullAge(dat){
    let date_f = new Date(dat);

    let now = new Date(); //получаем сегодняшнюю дату
    let today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); //сегодня
    let dat_year = new Date(date_f.getFullYear(), date_f.getMonth(), date_f.getDate());
    let dat_year_now = new Date(today.getFullYear(), date_f.getMonth(), date_f.getDate());

    let age = today.getFullYear() - dat_year.getFullYear(); //Возраст = текущий год - год рождения

    //Если ДР в этом году ещё предстоит, то вычитаем из age один год
    if (today < dat_year_now) {
        age = age-1;
    }

    return age;
}
В принципе тут все просто. Получаем сегодняшнюю дату в нужном формате и дату рождения (или получения прав) и вычитаем друг из друга. Если еще не наступил день в этом году (день рожденья или день начала стажа), то год минусом. Вторая функция это уже расчет по таблице КВС

function calcKBC(age, exp){
    let arr = new Array();
    let arr16_21 = [2.27, 1.92, 1.84, 1.65, 1.62, 0, 0 ,0];
    let arr22_24 = [1.88, 1.72, 1.71, 1.13, 1.1, 1.09, 0 ,0];
    let arr25_29 = [1.72, 1.6, 1.54, 1.09, 1.08, 1.07, 1.02 ,0];
    let arr30_34 = [1.56, 1.50, 1.48, 1.05, 1.04, 1.01, 0.97 ,0.95];
    let arr35_39 = [1.54, 1.47, 1.46, 1, 0.97, 0.95, 0.94 ,0.93];
    let arr40_49 = [1.5, 1.44, 1.43, 0.96, 0.95, 0.94, 0.93 ,0.91];
    let arr50_59 = [1.46, 1.4, 1.39, 0.93, 0.92, 0.91, 0.9 ,0.86];
    let arr60 = [1.43, 1.36, 1.35, 0.91, 0.9, 0.89, 0.88 ,0.83];

    if (age <= 21){
        arr = arr16_21;
    }
    if (age >= 22 && age <= 24){
        arr = arr22_24;
    }
    if (age >= 25 && age <= 29){
        arr = arr25_29;
    }
    if (age >= 30 && age <= 34){
        arr = arr30_34;
    }
    if (age >= 35 && age <= 39){
        arr = arr35_39;
    }
    if (age >= 40 && age <= 49){
        arr = arr40_49;
    }
    if (age >= 50 && age <= 59){
        arr = arr50_59;
    }
    if (age >= 60){
        arr = arr60;
    }

    let chet = exp;
    if (exp == 4){
        chet = 3;
    }
    if (exp >=5 && exp <=6){
        chet = 4;
    }
    if (exp >=7 && exp <=9){
        chet = 5;
    }
    if (exp >=10 && exp <=14){
        chet = 6;
    }
    if (exp > 14){
        chet = 7;
    }

    return arr[chet];
}
Скорее всего тут можно и более красивее и короче сделать (двумерным массивом например), но и так наглядно видно что и где и главное – все менять чрезвычайно просто. Несколько массивов (каждый для своего промежутка возраста), содержащих коэффициенты по стажу – выбираем нужно значение исходя из аргументов функции. Вот так просто можно рассчитать КВС на JavaScript.



Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегизаметки, javascript, осаго





Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Фотоотчет о рыбалке
Несколько полезных для отладки функций PHP


© upread.ru 2013-2022
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.