Diferença de horas entre duas datas com JavaScript? – javascript jquery

Pergunta:


Olá.

Tenho essas duas datas:

   var dtPartida = "20170620 11:20";
   var dtChegada = "20170620 16:40";

E preciso descobrir a diferença em horas entre essas datas que no caso e 5 horas e 20 minutos.

Preciso que retorne assim:

5h 20m

e não assim:

05:20

Autor da pergunta usuario

Lucas Costa

Manualmente com javascript, da pra criar um date a partir da string, pegando separadamente ano, mês, dia, minuto e segundo, e depois calcular a diferente entre as datas (e minutos e segundos).

Exemplo

var dtPartida = "20170620 11:20";
var dtChegada = "20170620 16:40";

var date1 = new Date(dtPartida.slice(0,4), dtPartida.slice(4,6),dtPartida.slice(6,8), dtPartida.slice(9,11), dtPartida.slice(12,14)),
    date2 = new Date(dtChegada.slice(0,4), dtChegada.slice(4,6),dtChegada.slice(6,8), dtChegada.slice(9,11), dtChegada.slice(12,14));

var diffMs = (date2 - date1);
var diffHrs = Math.floor((diffMs % 86400000) / 3600000);
var diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000);
var diff = diffHrs + 'h ' + diffMins + 'm';
console.log(diff);

Uma poderosa biblioteca javascript para manipulação de datas Moment.js

  var dtChegada  = "20/06/2017 16:40:00";
  var dtPartida = "20/06/2017 11:20:00";

  var ms = moment(dtChegada,"DD/MM/YYYY HH:mm:ss").diff(moment(dtPartida,"DD/MM/YYYY HH:mm:ss"));
  var d = moment.duration(ms);
  var s = Math.floor(d.asHours()) + moment.utc(ms).format(":mm:ss");

console.log(s);
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.4.0/moment.min.js"></script>

Para retornar no formato pedido no comentario 5h 20m
basta agir na variável s

var s = Math.floor(d.asHours()) + "h" + moment.utc(ms).format(" mm") +"m";

  var dtChegada  = "20/06/2017 16:40:00";
  var dtPartida = "20/06/2017 11:20:00";

  var ms = moment(dtChegada,"DD/MM/YYYY HH:mm:ss").diff(moment(dtPartida,"DD/MM/YYYY HH:mm:ss"));
  var d = moment.duration(ms);
  var s = Math.floor(d.asHours()) + "h" + moment.utc(ms).format(" mm") +"m";

console.log(s);
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.4.0/moment.min.js"></script>

Supondo os horários que mencionou antes da edição da pergunta:

var dtChegada  = "16:40";
var dtPartida = "11:20";

var ms = moment(dtChegada,"HH:mm").diff(moment(dtPartida,"HH:mm"));
var d = moment.duration(ms);
var s = Math.floor(d.asHours()) + "h" + moment.utc(ms).format(" mm") +"m";
  
console.log(s);
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.4.0/moment.min.js"></script>

Para o caso das datas estarem no formato da resposta do Lucas Costa

  var dtChegada  = "20170620 16:40";
  var dtPartida  = "20170620 11:20";

  var ms = moment(dtChegada,"DD/MM/YYYY HH:mm:ss").diff(moment(dtPartida,"DD/MM/YYYY HH:mm:ss"));
  var d = moment.duration(ms);
  var s = Math.floor(d.asHours()) + "h" + moment.utc(ms).format(" mm") +"m";
  
  console.log(s);
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.4.0/moment.min.js"></script>

Tu pode testar pelos minutos ou segundos das horas:

function verificarDiferencaHorario(inicialMin, finalMin) {
        var totalMin = Number(finalMin - inicialMin);
        console.log(Math.trunc(totalMin / 60).toString() + ":" + (totalMin % 60).toString());
    }

Supondo os horários que mencionou:

function verificarHorario() {
        var inicial = "11:20", final = "16:40";
        var splInicial = inicial.split(":"), splFinal = final.split(":");

        var inicialMin = (Number(splInicial[0] * 60)) + Number(splInicial[1]);
        var finalMin = (Number(splFinal[0] * 60)) + Number(splFinal[1]);

        verificarDiferencaHorario(inicialMin, finalMin);
    }

O mesmo vale para dias: a última conversão em minutos e a função verificarDiferencaHorario retorna em horas e minutos a diferença.

Fonte

Related Posts:

Qual a diferença entre AppCompatActivity e Activity? – android android-activity
Pergunta: Qual a diferença da AppCompatActivity para Activity ? A partir de qual versão a AppCompatActivity foi adicionada ao Android? Autor da pergunta Luhhh A diferença reside ...
Como abreviar palavras em PHP? – php string
Pergunta: Possuo informações comuns como nome de pessoas e endereços, e preciso que elas contenham no máximo 30 caracteres sem cortar palavras. Exemplo: 'Avenida Natalino João Brescansin' ...
Qual é a finalidade de um parêntese vazio numa declaração Lambda? – c# expressões-lambda característica-linguagem
Pergunta: Criei um exemplo de uma declaração Lambda sem argumentos, entretanto, estou com duvidas referente a omissão do parêntese vazio () na declaração. Veja o exemplo: class ...
Boas práticas para URI em API RESTful – api rest restful
Pergunta: Estou com dúvida em relação às URIs de alguns recursos da api que estou desenvolvendo. Tenho os recursos projetos e atividades com relação 1-N, ...
Dúvidas sobre a integração do MySQL com Java – java mysql netbeans
Pergunta: Estou criando um sistema no NetBeans, utilizando a linguagem Java e o banco de dados MySQL. Escrevi o seguinte código para realizar a conexão ...
Qual é a finalidade da pasta Model do framework Inphinit? – php inphinit
Pergunta: No Inphinit micro-framework existe a pasta Model que fica dentro da pasta application, e nela é onde ficam as classes, mas eu estou muito ...
Uso do ‘@’ em variáveis – javascript typescript coffeescript
Pergunta: Vejo em algumas linguagens que compilam para javascript, como TypeScript e CoffeeScript, o uso do @ em variáveis, como também, casos em que o ...
Qual tamanho máximo um arquivo JSON pode ter? – json arquivo
Pergunta: Vou dar um exemplo para conseguir explicar minha duvida: Preciso recuperar informação de imagens vindas de uma API, esse banco de imagens me retorna JSON's ...
O que é Teste de Regressão? – terminologia engenharia-de-software testes
Pergunta: Na matéria de Teste de Software o professor abordou um termo chamado Teste de Regressão, isto dentro da disciplina de teste de software. Sendo ...
O que é um construtor da linguagem? – php característica-linguagem
Pergunta: Em PHP, já li e ouvi várias vezes a respeito dos Construtores da Linguagem. Os casos que sempre ouvi falar deles foi em casos ...
Função intrínseca para converter numérico para string – cobol
Pergunta: Estou a tentar saber se existe alguma função intrínseca do COBOL para converter um data numérico para string sem precisar usar a cláusula REDEFINES: ( ...
Porque usar implements? – java android
Pergunta: Qual a diferença entre usar btn.setOnClickListener(new OnClickListener() { e public class MainActivity extends Activity implements OnClickListener{ Estive fazendo um curso de Android e meu professor falou que ...
O que é XHTML e quando deve ser usado? – html xml xhtml
Pergunta: O que eu sei é que o XHTML precisa ser XML válido. Isso implica, por exemplo, que todas as tags precisam ser fechadas. Por ...
Uma placa aceleradora de vídeo pode melhorar o desempenho não-gráfico? [fechada] – desempenho
Pergunta: Para desenvolver em Ruby on Rails, eu utilizo aqui uma máquina virtual do VirtualBox com Ubuntu Server 14.04 sem interface gráfica instalada. Recentemente descobri uma ...
Concat() VS Union() – c# .net
Pergunta: Qual a diferença entre Concat() e Union() ? Quando usar Concat() e quando usar Union() ? Somente pode ser usado em list ? ...

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *