online: 6; azi: 335; total: 50790 Webdesign - Coduri-si-functii-in-js - 11

Diferenta dintre doua date de timp si ore

Functia prezentata in aceasta pagina, diffDateTime(), poate fi utilizata pentru a obtine diferenta dintre doua date de timp, si ore in JavaScript. Aceasta functie primeste 2 parametri: data /ora de start si cea de sfarsit. Se pot folosi mai multe formate de data si timp: Unix Timestamp (numar in milisecunde), sau un sir continand data si timpul in format Englezesc. Se poate folosi si un sir cu unul din aceste cuvinte: NOW pt data /ora curenta, si TOMORROW pt ziua urmatoare (ora 0:0:1); vedeti in exemplele prezentate dupa codul functiei.

Functie care returneaza diferenta dintre 2 date si ore

Returneaza un obiect cu elemente ce reprezinta diferenta dintre 2 date /ore: numar de zile, ore, minute, secunde, total ore, total minute, si total secunde (vedeti comentariile din cod).
/* Functie pt diferenta dintre 2 date /ore (in Timestamp-milisecunde, sau sir cu Data-Timpul in format Englezesc)
 Se poate folosi si unul din aceste cuvinte: NOW pt data /ora curenta, si TOMORROW pt ziua urmatoare (ora 0:0:1)
 Returneaza un obiect cu aceste elemente {days, hours, minutes, seconds, totalhours, totalmin, totalsec}
*/
function diffDateTime(startDT, endDT){
 // Curs JavaScript & jQuery - http://www.discant.ro/javascript/
  // daca parametrul e sir, doar ora in hh:mm:ss (cu sau fara AM/PM), creaza obiect Date pt momentul actual,
  // si seteaza ora, minutele, secundele din parametru
  // altfel, daca parametru e "now", seteaza obiect Date cu momentul actual
  // altfel, daca parametru e "tomorrow", seteaza obiect Date cu momentul actual si ora 24 + 1 secunda
  // altfel seteaza obiect Date cu data si timpul din startDT si endDT
  if(typeof startDT == 'string' && startDT.match(/^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}[amp ]{0,3}$/i)){
    startDT = startDT.match(/^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}/);
    startDT = startDT.toString().split(':');
    var obstartDT = new Date();
    obstartDT.setHours(startDT[0]);
    obstartDT.setMinutes(startDT[1]);
    obstartDT.setSeconds(startDT[2]);
  }
  else if(typeof startDT == 'string' && startDT.match(/^now$/i)) var obstartDT = new Date();
  else if(typeof startDT == 'string' && startDT.match(/^tomorrow$/i)){
    var obstartDT = new Date();
    obstartDT.setHours(24);
    obstartDT.setMinutes(0);
    obstartDT.setSeconds(1);
  }
  else var obstartDT = new Date(startDT);

  if(typeof endDT == 'string' && endDT.match(/^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}[amp ]{0,3}$/i)){
    endDT = endDT.match(/^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}/);
    endDT = endDT.toString().split(':');
    var obendDT = new Date();
    obendDT.setHours(endDT[0]);
    obendDT.setMinutes(endDT[1]);
    obendDT.setSeconds(endDT[2]);  
  }
  else if(typeof endDT == 'string' && endDT.match(/^now$/i)) var obendDT = new Date();
  else if(typeof endDT == 'string' && endDT.match(/^tomorrow$/i)){
    var obendDT = new Date();
    obendDT.setHours(24);
    obendDT.setMinutes(0);
    obendDT.setSeconds(1);
  }
  else var obendDT = new Date(endDT);

  // obtine diferenta in numar de secunde
  // daca diferenta e negativa, orele sunt din zile diferite, si adauga 1 zi (in sec.)
  var secondsDiff = (obendDT.getTime() - obstartDT.getTime()) > 0 ? (obendDT.getTime() - obstartDT.getTime()) / 1000 :  (86400000 + obendDT.getTime() - obstartDT.getTime()) / 1000;
  secondsDiff = Math.abs(Math.floor(secondsDiff));

  var oDiff = {};     // obiect ce va contine datele returnate de functie

  oDiff.days = Math.floor(secondsDiff/86400);
  oDiff.totalhours = Math.floor(secondsDiff/3600);      // total numar de ore in diferenta
  oDiff.totalmin = Math.floor(secondsDiff/60);      // total numar de minute in diferenta
  oDiff.totalsec = secondsDiff;      // total numar de secunde in diferenta

  secondsDiff -= oDiff.days*86400;
  oDiff.hours = Math.floor(secondsDiff/3600);     // numar de ore dupa zile

  secondsDiff -= oDiff.hours*3600;
  oDiff.minutes = Math.floor(secondsDiff/60);     // numar de minute dupa ore

  secondsDiff -= oDiff.minutes*60;
  oDiff.seconds = Math.floor(secondsDiff);     // numar de secunde dupa minute

  return oDiff;
}

- Exemplu utilizare functie diffDateTime(), cu diferite formate de data-timp. Rezultatul va fi adaugat intr-un tag HTML cu id="testdtdiff".
<div id="testdtdiff"></div>
<script type="text/javascript"><!--
// Aici se adauga functia diffDateTime()

  /* 1.) Diferenta dintre 2 ore (in hours:min:sec) */
var objDiff = diffDateTime('8:35:6', '8:55:34 AM');
var dtdiff = objDiff.days+ ' zile, '+ objDiff.hours+ ' ore, '+ objDiff.minutes+ ' minute, '+ objDiff.seconds+ ' secunde';
var total_hours = 'Total Ore: '+ objDiff.totalhours;
var total_min = 'Total minute: '+ objDiff.totalmin;

// adauga rezultatul in elementul #testdtdiff
document.getElementById('testdtdiff').innerHTML += '1.) <b>"8:35:6", "8:55:34"</b><br/>Diferenta: '+ dtdiff+ '<br/>'+ total_hours+ '<br/>'+ total_min;

  /* 2.) Diferenta dintre o data anterioara si "now" (momentul curent) */
var objDiff = diffDateTime('07/19/2012 14:10:00', 'now');
var dtdiff = objDiff.days+ ' zile, '+ objDiff.hours+ ' ore, '+ objDiff.minutes+ ' minute, '+ objDiff.seconds+ ' secunde';
var total_hours = 'Total Ore: '+ objDiff.totalhours;
var total_min = 'Total minute: '+ objDiff.totalmin;

// adauga rezultatul in elementul #testdtdiff
document.getElementById('testdtdiff').innerHTML += '<br/><br/>2.) <b>"07/19/2012 14:10:00", "now"</b><br/>Diferenta: '+ dtdiff+ '<br/>'+ total_hours+ '<br/>'+ total_min;

  /* 3.) Diferenta dintre "now" (momentul curent) si "tomorrow" (prima secunda din ziua urmatoare) */
var objDiff = diffDateTime('NOW', 'TOMORROW');
var dtdiff = objDiff.days+ ' zile, '+ objDiff.hours+ ' ore, '+ objDiff.minutes+ ' minute, '+ objDiff.seconds+ ' secunde';
var total_hours = 'Total Ore: '+ objDiff.totalhours;
var total_min = 'Total minute: '+ objDiff.totalmin;

// adauga rezultatul in elementul #testdtdiff
document.getElementById('testdtdiff').innerHTML += '<br/><br/>3.) <b>"NOW", "TOMORROW"</b><br/>Diferenta: '+ dtdiff+ '<br/>'+ total_hours+ '<br/>'+ total_min;

  /* 4.) Diferenta dintre 2 date si ore */
var objDiff = diffDateTime('August 25, 2012 14:10:00', '09/18/2012 08:25:00');
var dtdiff = objDiff.days+ ' zile, '+ objDiff.hours+ ' ore, '+ objDiff.minutes+ ' minute, '+ objDiff.seconds+ ' secunde';
var total_hours = 'Total Ore: '+ objDiff.totalhours;
var total_min = 'Total minute: '+ objDiff.totalmin;

// adauga rezultatul in elementul #testdtdiff
document.getElementById('testdtdiff').innerHTML += '<br/><br/>4.) <b>"August 25, 2012 14:10:00", "09/18/2012 08:25:00"</b><br/>Diferenta: '+ dtdiff+ '<br/>'+ total_hours+ '<br/>'+ total_min;

  /* 5.) Diferenta dintre 2 date-timp, cu Timestamp (in milisecunde) */
var objDiff = diffDateTime(1348012438000, 1348029429000);
var dtdiff = objDiff.days+ ' zile, '+ objDiff.hours+ ' ore, '+ objDiff.minutes+ ' minute, '+ objDiff.seconds+ ' secunde';
var total_hours = 'Total Ore: '+ objDiff.totalhours;
var total_min = 'Total minute: '+ objDiff.totalmin;

// adauga rezultatul in elementul #testdtdiff
document.getElementById('testdtdiff').innerHTML += '<br/><br/>5.) <b>1348012438000, 1348029429000</b><br/>Diferenta: '+ dtdiff+ '<br/>'+ total_hours+ '<br/>'+ total_min;
--></script>
Ca sa vedeti rezultatul acestor exemple, clic: