Визначаємо кількість днів між двома значеннями мілісекунд з метода Date.getTime() і ділимо на кілікість мілісекунд в день:
Функція getDays приймає два параметри date1 і date2 у форматі рядок або об`єкт Date та повертає різницю між датами в днях.
Кількість днів отримуємо вирахувавши різницю мілісекунд між датами і поділивши результат на 86400000 (кількість мілісекунд в 1 добі).
function getDays(date1, date2){
var d1, d2;
if(typeof date1=='string')
d1=new Date(date1);
else
d1=new Date(date1.getTime());
if(typeof date2=='string')
d2=new Date(date2);
else
d2=new Date(date2.getTime());
return (Math.abs(d2.getTime()-d1.getTime())/86400000);
}
alert( 'різниця між датами днів: '+getDays('2020-02-22','2020-02-25') );
Якщо параметр date2 не вказано тоді це сьогоднішня дата.
function differenceDate(date1, date2){
if(date2==undefined)date2=new Date();
var d1=new Date(typeof date1=='string'?date1:date1.getTime()),
d2=new Date(typeof date2=='string'?date2:date2.getTime());
var Y,M,D;
M=0;
var d=new Date(d1.getTime());
while(true){
d.setMonth(d.getMonth()+1);
if(d.getTime()<d2.getTime())
M++;
else{
d.setMonth(d.getMonth()-1);
break;
}
}
Y=parseInt(M/12);
M=M-(Y*12);
D=parseInt(Math.abs(d2.getTime()-d.getTime())/86400000);
return {year:Y, month:M, date:D, toString:function(){return this.year+' років, '+this.month+' місяців, '+this.date+' днів';}};
}
alert( 'з 2016-07-17 до сьогодні: '+differenceDate('2016-07-17') );
Якщо параметр date2 не вказано тоді це сьогоднішня дата і час.
function differenceDateTime(date1, date2){
if(date2==undefined)date2=new Date();
var d1=new Date(typeof date1=='string'?date1:date1.getTime()),
d2=new Date(typeof date2=='string'?date2:date2.getTime());
var Y,M,D,ms,h,m,s;
M=0;
var d=new Date(d1.getTime());
while(true){
d.setMonth(d.getMonth()+1);
if(d.getTime()<d2.getTime())
M++;
else{
d.setMonth(d.getMonth()-1);
break;
}
}
Y=parseInt(M/12);
M=M-(Y*12);
ms=d2.getTime()-d.getTime();
D=parseInt(ms/86400000);
ms=ms-(D*86400000);
h=parseInt(ms/3600000);
ms=ms-(h*3600000);
m=parseInt(ms/60000);
ms=ms-(m*60000);
s=parseInt(ms/1000);
return {year:Y, month:M, date:D, hour:h, minute:m, second: s, toString:function(){return this.year+' років, '+this.month+' місяців, '+this.date+' днів, '+this.hour+' годин, '+this.minute+' хвилин, '+this.second+' секунди';}};
}
alert( 'різниця: '+differenceDateTime('2016-07-17 10:25:10', '2020-03-07 01:25:33') );