Calculați diferența de timp cu JavaScript

Am două casete de intrare HTML, care trebuie să calculeze diferența de timp în JavaScript onBlur (din moment ce am nevoie de ea în timp real) și să introduc rezultatul în caseta de intrare nouă.

Format example: 10:00 & 12:30 need to give me: 02:30

Mulțumiri!

0
JavaScript este NOT o limbă de scripting de java !
adăugat autor gdoron, sursa
Sunt datele efective în caseta de text? Puteți posta codul HTML și unele date de probă?
adăugat autor mattytommo, sursa
Utilizați Java , JScript sau Javascript ? Sunt toate limbile diferite.
adăugat autor Paulpro, sursa

8 răspunsuri

În funcție de ce vă permiteți să intrați, acesta va funcționa. S-ar putea să existe unele probleme de limită dacă doriți să permiteți între orele 1 și 1pm

NOTĂ: Aceasta nu utilizează obiecte de date sau moment.js

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

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
  );
}
<input type="time" id="timeOfCall">
<input type="time" id="timeOfResponse">
<button type="button" id="button">CLICK</button>
<input type="time" id="delay">
</div> </div>
0
adăugat

Iată o soluție posibilă:

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
adăugat
Vreau să arăt secundele aici. Cum pot să fac aici?
adăugat autor Chinmay235, sursa
Mulțumesc mult !!!
adăugat autor user1424332, sursa

Ei bine, acest lucru este aproape grozav. Acum folosiți acest cod pentru a calcula: 23:50 - 00:10 Și vezi ce obții. Sau chiar 23:30 - 01:30. Asta eo mizerie. Deoarece obtinerea raspunsului invers in PHP este:

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

Dar totuși, funcționează ca a ta. Cred că trebuie să aducem și datele?

Și din nou: Cercetarea și dezvoltarea mea puternică mi-au ajutat.

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);
}

Și astfel calculați timpul până în ziua următoare. //Editați | ×. Mai întâi am schimbat data1 și data2. Trebuie să -1 deoarece acest calcul vine doar a doua zi și prima dată ieri vas.

După îmbunătățirea și o mulțime de putere creier cu prietenul meu am venit la acest lucru:

$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.

Deci, de fapt, aveți nevoie de doar 4 linii de cod pentru a obține rezultatul. Puteți lua doar câteva minute sau puteți arăta la un moment dat (ca diferența este 02:32) 2 ore și 32 minute. Ceea ce este cel mai important: Totusi poti calcula peste noapte in ceasul de 24 ore aka: Timp de incepere 11:50 PM sa zicem 01:00 AM (in ceasul 24 de ore 23:50 - 01:00) pentru ca in 12 ore functioneaza oricum.

Ce este cel mai important: nu trebuie să formatați datele introduse. Puteți folosi doar 2300 ca intrare 23:00. Acest script va converti intrarea câmpului de text în format corect de la sine. Ultimul script utilizează formularul html standard cu method = "get", dar îl puteți converti pentru a utiliza metoda POST.

0
adăugat

Incearca asta

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

Încercați acest lucru: de fapt, aceasta este o problemă de la codeeval.com

Am rezolvat-o în acest fel.

Acest program ia un fișier ca argument, așa că am folosit un mic nod JS pentru a citi fișierul.

Aici este codul meu.

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
adăugat
Când OP a spus căsuțele de intrare HTML și JavaScript onBlur, cred că a fost clar că argumentele nu ar trebui să fie dintr-un fișier.
adăugat autor jagc, sursa

Aceasta este o versiune actualizată a versiunii care a fost deja trimisă. Este cu secundele.

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;
}

Versiunea actualizată:

Vă permite să convertiți datele în milisecunde și să deconectați de la acestea în loc să le divizați.

Exemplu - Ani/Luni/Săptămâni/Zile/Ore/Minute/Secunde

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

0
adăugat

Cu secunde pe care le-ați furnizat nu este obțineți rezultat pentru mine, vă rugăm să găsiți funcția mea actualizat vă oferă secundele corecte aici - De 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
adăugat

În general, avem nevoie de o diferență de timp pentru a estima timpul necesar operațiilor de I/O, apelarea SP etc., cea mai simplă soluție pentru NodeJs (consola este în apel callback-async) este următoarea:

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{
   }
})
0
adăugat
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com