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 - https://marplo.net/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>