Calcola la differenza di tempo con JavaScript

Ho due caselle di input HTML, che devono calcolare la differenza di tempo in JavaScript onBlur (poiché ne ho bisogno in tempo reale) e inserire il risultato nella nuova casella di input.

Esempio di formato: 10:00 e 12:30 devono darmi: 02:30

Grazie!

Ecco una ansible soluzione:

 function diff(start, end) { start = start.split(":"); end = end.split(":"); var startDate = new Date(0, 0, 0, start[0], start[1], 0); var endDate = new Date(0, 0, 0, end[0], end[1], 0); var diff = endDate.getTime() - startDate.getTime(); var hours = Math.floor(diff / 1000 / 60 / 60); diff -= hours * 1000 * 60 * 60; var minutes = Math.floor(diff / 1000 / 60); // If using time pickers with 24 hours format, add the below line get exact hours if (hours < 0) hours = hours + 24; return (hours <= 9 ? "0" : "") + hours + ":" + (minutes <= 9 ? "0" : "") + minutes; } 

DEMO: http://jsfiddle.net/KQQqp/

Bene, questo lavoro è quasi perfetto. Ora usa questo codice per calcolare: 23:50 – 00:10 e guarda cosa ottieni. O anche 23:30 – 01:30. È un casino Perché ottenere la risposta nell’altro modo in PHP è:

 $date1 = strtotime($_POST['started']); $date2 = strtotime($_POST['ended']); $interval = $date2 - $date1; $playedtime = $interval / 60; 

Ma ancora, funziona come il tuo. Immagino di dover portare anche le date?

E ancora: il mio duro lavoro di ricerca e sviluppo mi ha aiutato.

 if (isset($_POST['calculate'])) { $d1 = $_POST['started']; $d2 = $_POST['ended']; if ($d2 < $d1) { $date22 = date('Ym-'); $date222 = date('d')-1; $date2 = $date22."".$date222; } else { $date2 = date('Ym-d'); } $date1 = date('Ym-d'); $start_time = strtotime($date2.' '.$d1); $end_time = strtotime($date1.' '.$d2); // or use date('Ymd H:i:s') for current time $playedtime = round(abs($start_time - $end_time) / 60,2); } 

Ed è così che si calcola il tempo fino al giorno successivo. //modificare. Per prima cosa ho avuto la data1 e la data2 passate. Ho bisogno di -1 perché questo calcolo arriva solo il giorno dopo e il primo appuntamento di ieri.

Dopo aver migliorato e un sacco di energia cerebrale con il mio amico siamo arrivati ​​a questo:

 $begin=mktime(substr($_GET["start"], 0,2),substr($_GET["start"], 2,2),0,1,2,2003); $end=mktime(substr($_GET["end"], 0,2),substr($_GET["end"], 2,2),0,1,3,2003); $outcome=($end-$begin)-date("Z"); $minutes=date("i",$outcome)+date("H",$outcome)*60; //Echo minutes only $hours = date("H:i", $outcome); //Echo time in hours + minutes like 01:10 or something. 

Quindi in realtà hai bisogno solo di 4 linee di codice per ottenere il tuo risultato. Puoi prendere solo pochi minuti o mostrare a tempo pieno (come la differenza è 02:32) 2 ore e 32 minuti. La cosa più importante: puoi comunque calcolare la notte in 24 ore, ovvero: Ora di inizio alle 23:50 per dire 01:00 (in 24 ore 23:50 - 01:00) perché nella modalità 12 ore funziona comunque.

Cosa è più importante: non devi formattare il tuo input. È ansible utilizzare semplicemente 2300 come ingresso 23:00. Questo script convertirà l'input del campo di testo nel formato corretto da solo. L'ultimo script usa un modulo html standard con method = "get" ma puoi convertirlo anche per usare il metodo POST.

Prova questo

 var dif = ( new Date("1970-1-1 " + end-time) - new Date("1970-1-1 " + start-time) ) / 1000 / 60 / 60; 

Questa è una versione aggiornata di quella che è stata già inviata. È con i secondi.

 function diff(start, end) { start = start.split(":"); end = end.split(":"); var startDate = new Date(0, 0, 0, start[0], start[1], 0); var endDate = new Date(0, 0, 0, end[0], end[1], 0); var diff = endDate.getTime() - startDate.getTime(); var hours = Math.floor(diff / 1000 / 60 / 60); diff -= hours * (1000 * 60 * 60); var minutes = Math.floor(diff / 1000 / 60); diff -= minutes * (1000 * 60); var seconds = Math.floor(diff / 1000); // If using time pickers with 24 hours format, add the below line get exact hours if (hours < 0) hours = hours + 24; return (hours <= 9 ? "0" : "") + hours + ":" + (minutes <= 9 ? "0" : "") + minutes + (seconds<= 9 ? "0" : "") + seconds; } 

La mia versione aggiornata:

Ti permette di convertire le date in millisecondi e uscire da quella invece di dividere.

Esempio: anni / mesi / settimane / giorni / ore / minuti / secondi

Esempio: https://jsfiddle.net/jff7ncyk/308/

Con i secondi che hai fornito non ottieni risultati per me, per favore trova la mia funzione aggiornata dandoti i secondi corretti qui – Di Dinesh J

 function diff(start, end) { start = start.split(":"); end = end.split(":"); var startDate = new Date(0, 0, 0, start[0], start[1],start[2], 0); var endDate = new Date(0, 0, 0, end[0], end[1],end[2], 0); var diff = endDate.getTime() - startDate.getTime(); var hours = Math.floor(diff / 1000 / 60 / 60); diff -= hours * 1000 * 60 * 60; var minutes = Math.floor(diff / 1000 / 60); var seconds = Math.floor(diff / 1000)-120; // If using time pickers with 24 hours format, add the below line get exact hours if (hours < 0) hours = hours + 24; return (hours <= 9 ? "0" : "") + hours + ":" + (minutes <= 9 ? "0" : "") + minutes+ ":" + (seconds <= 9 ? "0" : "") + seconds; } 

A seconda di cosa si consente di entrare, questo funzionerà. Potrebbero esserci alcuni problemi di limite se si desidera consentire l’1:00 all’1pm

NOTA: questo NON sta usando oggetti data o moment.js

 function pad(num) { return ("0"+num).slice(-2); } function diffTime(start,end) { var s = start.split(":"), sMin = +s[1] + s[0]*60, e = end.split(":"), eMin = +e[1] + e[0]*60, diff = eMin-sMin; if (diff<0) { sMin-=12*60; diff = eMin-sMin } var h = Math.floor(diff / 60), m = diff % 60; return "" + pad(h) + ":" + pad(m); } document.getElementById('button').onclick=function() { document.getElementById('delay').value=diffTime( document.getElementById('timeOfCall').value, document.getElementById('timeOfResponse').value ); } 
     
  calTimeDifference(){ this.start = dailyattendance.InTime.split(":"); this.end = dailyattendance.OutTime.split(":"); var time1 = ((parseInt(this.start[0]) * 60) + parseInt(this.start[1])) var time2 = ((parseInt(this.end[0]) * 60) + parseInt(this.end[1])); var time3 = ((time2 - time1) / 60); var timeHr = parseInt(""+time3); var timeMin = ((time2 - time1) % 60); } 

Prova questo: in realtà questo è un problema di codeeval.com

L’ho risolto in questo modo.

Questo programma prende un file come argomento quindi ho usato un piccolo nodo js per leggere il file.

Ecco il mio codice.

 var fs = require("fs"); fs.readFileSync(process.argv[2]).toString().split('\n').forEach(function (line) { if (line !== "") { var arr = line.split(" "); var arr1 = arr[0].split(":"); var arr2 = arr[1].split(":"); var time1 = parseInt(arr1[0])*3600 + parseInt(arr1[1])*60 + parseInt(arr1[2]); var time2 = parseInt(arr2[0])*3600 + parseInt(arr2[1])*60 + parseInt(arr2[2]); var dif = Math.max(time1,time2) - Math.min(time1,time2); var ans = []; ans[0] = Math.floor(dif/3600); if(ans[0]<10){ans[0] = "0"+ans[0]} dif = dif%3600; ans[1] = Math.floor(dif/60); if(ans[1]<10){ans[1] = "0"+ans[1]} ans[2] = dif%60; if(ans[2]<10){ans[2] = "0"+ans[2]} console.log(ans.join(":")); } }); 

Generalmente abbiamo bisogno di una differenza di tempo per stimare il tempo impiegato dalle operazioni di I / O, dalla chiamata SP ecc., La soluzione più semplice per NodeJs (la console è in esecuzione callback-async) è la seguente:

 var startTime = new Date().getTime(); //This will give you current time in milliseconds since 1970-01-01 callYourExpectedFunction(param1, param2, function(err, result){ var endTime = new Date().getTime(); //This will give you current time in milliseconds since 1970-01-01 console.log(endTime - startTime) //This will give you time taken in milliseconds by your function if(err){ } else{ } })