sábado, 25 de julho de 2015

Um pouco mais de datas no js

Outras funcionalidades interessantes com datas são: 

1) calcular a diferença entre duas datas; 
2) data uma determinada data, adicionar um número inteiro de 'DateParts'.

Para a primeira hipótese, todos os casos reais com os quais me deparei - e foram bem poucos - tratava da diferença em dias. Vejam a função abaixo que faz esse cálculo: 

function diferencaEmDias(data1, data2) {
    var dif =
        Date.UTC(data1.getYear(), data1.getMonth(), data1.getDate(), 0, 0, 0)
      - Date.UTC(data2.getYear(), data2.getMonth(), data2.getDate(), 0, 0, 0);
    return Math.abs((dif / 1000 / 60 / 60 / 24));
}

Caso necessitem de algo similar para outra DatePart como horas, minutos e segundos, basta adaptar o código no retorno. O nível mais detalhado seria a diferença em milissegundos.

function adicionarDias(data, dias) {
    return new Date(data.getTime() + (dias * 24 * 60 * 60 * 1000));
}

O mesmo vale para esse caso. Basta adaptar a função para obter outro níveis de retorno.

JS: Igual pra caralho!

Alguns de vocês já devem ter se deparado com um código que usa ou com a necessidade de uma comparação um pouco diferente no JavaScript. O operador "===", carinhosamente apelidado pelos meus colegas de trabalho de "igual-pra-caralho".

Então, vamos lá. Segue um pouco mais sobre a diferença entre os 3 operadores da mesma família:

= (Igual) É o operador de atribuição, usado para definir valores para propriedades ou variáveis;

== (Igual-igual) É o operador lógico que seria melhor definido como "equivalente". Ele avalia se o valor declarado ou de uma variável/propriedade é equivalente a um outro.

=== (Igual-pra-caralho) É o operador lógico que compara valor e tipo do dado.

A confusão está justamente aí. Quando usar um ou outro?
É importante lembrar que o JS não é uma linguagem fortemente tipada, então essa é justamente a razão de existir desse operador.

Eis um exemplo onde a utilização desses comparadores pode causar diferença:

function(){
    var texto = "";
    var numero = 0;

    if (texto == numero){
        alert("Esse código será executado");
    }

    if (texto === numero){
        alert("Esse não será...");
    }

    if (numero === "0"){
        alert("Esse também não..");
    }

    if (numero == "0"){
        alert("Esse SIM!");
    }
}

Por algum motivo, o JS entende que os valores "" para o tipo string e 0 são equivalentes. Como o operador 'Igual-pra-caralho' também verifica o tipo de dados, a verificação fica bem mais direcionada dentro do seu código.

É isso pessoal. Até a próxima!