Расчет КВС (коэффициент возраста и стажа водителя) на 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
Урок 11. Создание переменной JavaScript: let