Como calcular diferença de datas em DIAS?

reinaldo_vieira
Tera Contributor

Boa tarde, pessoal.

 

Estou trabalhando em um desafio que solicita calcular a diferença de datas em 2 campos de um formulário do Service Portal e impor bloqueios/mensagens do tipo error, a depender do resultado.

 

Calculating difference between two dates - Service Catalog form.jpeg

 

Os dois campos no formulário são do tipo Data (e não Data/Hora).

Dá pra fazer direto por Client Script ou é melhor uma combinação Script Include GlideAJAX + Catalog Client Script onChange pra isso?

 

Importante:
- Data em "data_inicio_emprestimo" NÃO PODE ser inferior a data atual. Caso seja, o campo exibirá uma mensagem de texto do tipo error e o formulário não poderá ser enviado.

- A diferença de data entre os campos (data_inicio_emprestimo / data_final_emprestimo) deve ser de no máximo 7 dias. Caso a diferença seja maior que 7 dias, o campo exibirá uma mensagem de texto do tipo error e o formulário não poderá ser enviado.

1 ACCEPTED SOLUTION

Flavio Tiezzi
Kilo Sage

Boa tarde, Reinaldo!

 

Pelo o que eu vi, o formato da data dos campos que você está utilizando é no padrão dd/MM/yyyy, certo? Na documentação do GlideDate, o formato esperado para o subtract é no padrão yyyy-MM-dd

 

Acredito que atualizando o código dessa forma deve atender o seu requisito:

 

Obs: No client script, ao utilizar o método getXMLAnswer, não é necessário chamar o XML Document todo. Pode utilizar direto a resposta do server - Aqui tem um tópico sobre o assunto

 

//CLIENT SCRIPT
function onChange(control, oldValue, newValue, isLoading) { //Variable name = data_final_emprestimo
    if (isLoading || newValue == '') {
        return;
    }

    //Type appropriate comment here, and begin script below
    var startDate = g_form.getValue('data_inicio_emprestimo');
    var endDate = g_form.getValue('data_final_emprestimo');
    var maxDays = 7;


    var ga = new GlideAjax('global.DifferDates');
    ga.addParam('sysparm_name', 'calcularDias');
    ga.addParam('sysparm_start', startDate);
    ga.addParam('sysparm_end', endDate);
    ga.getXMLAnswer(callback);

    function callback(response) {
        //var answer = response.responseXML.documentElement.getAttribute('answer');
        if (response > maxDays) {
            g_form.showFieldMsg('data_final_emprestimo', 'Você ultrapassou o limite de 7 dias. Por favor, escolha um período mais curto', 'error');
        } else {
            alert('Deu errado...'); //to check if Script Include and Client Script are running ok
        }

    }

}

//SCRIPT INCLUDE
var differDates = Class.create();
differDates.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    transformDate: function(date) {

        date = date.split('/');
        return date = date[2] + '-' + date[1] + '-' + date[0];
    },


    calcularDias: function() {
        var from = new GlideDate();
        //from.setDisplayValue(this.transformDate('01/10/2023'));
        from.setDisplayValue(this.transformDate(this.getParameter('sysparm_start')));

        var to = new GlideDate();
        //to.setDisplayValue(this.transformDate('01/11/2023'));
        to.setDisplayValue(this.transformDate(this.getParameter('sysparm_end')));

        var difference = GlideDate.subtract(from, to);
        var days = difference.getDayPart();

        return days;


    },

    type: 'differDates'
});

 

 

 

 

 

 

 

 

 

View solution in original post

5 REPLIES 5