2012-05-29 12 views
9

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.Calcola la differenza di orario con JavaScript

Formato di esempio: 10:00 12:30 & necessità di dare me: 02:30

Grazie!

+0

Si sta utilizzando 'Java',' JScript' o 'Javascript'? Sono tutte lingue diverse. – Paulpro

+2

'javascript' è ** NON ** un linguaggio di scripting di' java'! – gdoron

+0

Sono le date effettive nella casella di testo? Puoi pubblicare l'HTML e alcuni dati di esempio? – mattytommo

risposta

24

Ecco una possibile 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/

+0

Grazie mille !!! – user1424332

+0

Voglio mostrare i secondi qui. Come posso fare qui? – Chinmay235

2

bene questo lavoro quasi ottimo. 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 l'altro modo in PHP è:

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

Ma ancora, funziona come la tua. 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('Y-m-'); 
    $date222 = date('d')-1; 
    $date2 = $date22."".$date222; 
} else { 
$date2 = date('Y-m-d'); 
} 
$date1 = date('Y-m-d'); 
$start_time = strtotime($date2.' '.$d1); 
$end_time = strtotime($date1.' '.$d2); // or use date('Y-m-d 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. // edit. 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 potenza del cervello con il mio amico siamo venuti fino 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. 

Così è effettivamente necessario solo 4 righe di codice per ottenere il 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 ancora calcolare la notte in 24 ore, ovvero: Ora di inizio 23:50 per dire 01:00 (in 24 ore orologio 23:50 - 01:00) perché nella modalità 12 ore funziona comunque.

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

0

Try This

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

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

ho risolto in questo modo.

Questo programma accetta 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(":")); 
    } 
}); 
+0

Quando OP ha detto caselle di input HTML e evento onBlur javascript, penso che fosse chiaro che gli argomenti non dovrebbero provenire da un file. – jagc

0

Questa è una versione aggiornata di quella 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:

Consente per voi per convertire le date in millisecondi e andare fuori di che invece di dividere.

esempio non - anni/mesi/settimane/giorni/ore/minuti/secondi

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

0

Con secondi fornito non è ottenere il risultato per me si prega di trovare la mia funzione aggiornata la dando secondi corretti qui - da 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; 
} 
0

Noi in genere bisogno differenza di tempo per stimare tempo impiegato da operazioni di I/O, SP chiamare ecc, la soluzione più semplice per NodeJs (la console è in esecuzione asincrona callback-) sta seguendo :

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{ 
    } 
}) 
Problemi correlati