Diferença entre datas em JavaScript

Como encontrar a diferença entre duas datas?

Usando o object Date e seu valor em milissegundos, as diferenças podem ser calculadas:

var a = new Date(); // Current date now. var b = new Date(2010, 0, 1, 0, 0, 0, 0); // Start of 2010. var d = (ba); // Difference in milliseconds. 

Você pode obter o número de segundos (como um número inteiro / inteiro) dividindo os milésimos de segundo por 1000 para convertê-los em segundos, convertendo o resultado em um inteiro (isso remove a parte fracionária representando os milissegundos):

 var seconds = parseInt((ba)/1000); 

Você poderia então obter minutes inteiros dividindo seconds por 60 e convertendo-os em um inteiro, depois em hours dividindo os minutes por 60 e convertendo-os para um inteiro, depois unidades de tempo mais longas da mesma maneira. A partir disso, uma function para obter o valor total máximo de uma unidade de tempo no valor de uma unidade inferior e a unidade inferior restante pode ser criada:

 function get_whole_values(base_value, time_fractions) { time_data = [base_value]; for (i = 0; i < time_fractions.length; i++) { time_data.push(parseInt(time_data[i]/time_fractions[i])); time_data[i] = time_data[i] % time_fractions[i]; }; return time_data; }; // Input parameters below: base value of 72000 milliseconds, time fractions are // 1000 (amount of milliseconds in a second) and 60 (amount of seconds in a minute). console.log(get_whole_values(72000, [1000, 60])); // -> [0,12,1] # 0 whole milliseconds, 12 whole seconds, 1 whole minute. 

Se você está se perguntando quais são os parâmetros de input fornecidos para o segundo object Date , veja seus nomes abaixo:

 new Date(, , , , , , ); 

Conforme observado nos comentários dessa solução, você não precisa necessariamente fornecer todos esses valores, a menos que sejam necessários para a data que você deseja representar.

Eu encontrei isso e funciona bem para mim:

Calculando a diferença entre duas datas conhecidas

Infelizmente, calcular um intervalo de datas como dias, semanas ou meses entre duas datas conhecidas não é tão fácil porque você não pode simplesmente adicionar objects Date. Para usar um object Date em qualquer tipo de cálculo, primeiro devemos recuperar o valor do milissegundo interno da Data, que é armazenado como um inteiro grande. A function para fazer isso é Date.getTime (). Depois que as duas datas foram convertidas, subtrair a anterior da anterior retorna a diferença em milissegundos. O intervalo desejado pode ser determinado dividindo esse número pelo número correspondente de milissegundos. Por exemplo, para obter o número de dias para um determinado número de milissegundos, dividiríamos por 86.400.000, o número de milissegundos em um dia (1000 x 60 segundos x 60 minutos x 24 horas):

 Date.daysBetween = function( date1, date2 ) { //Get 1 day in milliseconds var one_day=1000*60*60*24; // Convert both dates to milliseconds var date1_ms = date1.getTime(); var date2_ms = date2.getTime(); // Calculate the difference in milliseconds var difference_ms = date2_ms - date1_ms; // Convert back to days and return return Math.round(difference_ms/one_day); } //Set the two dates var y2k = new Date(2000, 0, 1); var Jan1st2010 = new Date(y2k.getFullYear() + 10, y2k.getMonth(), y2k.getDate()); var today= new Date(); //displays 726 console.log( 'Days since ' + Jan1st2010.toLocaleDateString() + ': ' + Date.daysBetween(Jan1st2010, today)); 

O arredondamento é opcional, dependendo se você deseja dias parciais ou não.

Referência

  // This is for first date first = new Date(2010, 03, 08, 15, 30, 10); // Get the first date epoch object document.write((first.getTime())/1000); // get the actual epoch values second = new Date(2012, 03, 08, 15, 30, 10); // Get the first date epoch object document.write((second.getTime())/1000); // get the actual epoch values diff= second - first ; one_day_epoch = 24*60*60 ; // calculating one epoch if ( diff/ one_day_epoch > 365 ) // check , is it exceei { alert( 'date is exceeding one year'); } 

Se você está procurando uma diferença expressa como uma combinação de anos, meses e dias, eu sugeriria essa function:

 function interval(date1, date2) { if (date1 > date2) { // swap var result = interval(date2, date1); result.years = -result.years; result.months = -result.months; result.days = -result.days; result.hours = -result.hours; return result; } result = { years: date2.getYear() - date1.getYear(), months: date2.getMonth() - date1.getMonth(), days: date2.getDate() - date1.getDate(), hours: date2.getHours() - date1.getHours() }; if (result.hours < 0) { result.days--; result.hours += 24; } if (result.days < 0) { result.months--; // days = days left in date1's month, // plus days that have passed in date2's month var copy1 = new Date(date1.getTime()); copy1.setDate(32); result.days = 32-date1.getDate()-copy1.getDate()+date2.getDate(); } if (result.months < 0) { result.years--; result.months+=12; } return result; } // Be aware that the month argument is zero-based (January = 0) var date1 = new Date(2015, 4-1, 6); var date2 = new Date(2015, 5-1, 9); document.write(JSON.stringify(interval(date1, date2))); 
 Date.prototype.addDays = function(days) { var dat = new Date(this.valueOf()) dat.setDate(dat.getDate() + days); return dat; } function getDates(startDate, stopDate) { var dateArray = new Array(); var currentDate = startDate; while (currentDate <= stopDate) { dateArray.push(currentDate); currentDate = currentDate.addDays(1); } return dateArray; } var dateArray = getDates(new Date(), (new Date().addDays(7))); for (i = 0; i < dateArray.length; i ++ ) { // alert (dateArray[i]); date=('0'+dateArray[i].getDate()).slice(-2); month=('0' +(dateArray[i].getMonth()+1)).slice(-2); year=dateArray[i].getFullYear(); alert(date+"-"+month+"-"+year ); } 
 var DateDiff = function(type, start, end) { let // or var years = end.getFullYear() - start.getFullYear(), monthsStart = start.getMonth(), monthsEnd = end.getMonth() ; var returns = -1; switch(type){ case 'm': case 'mm': case 'month': case 'months': returns = ( ( ( years * 12 ) - ( 12 - monthsEnd ) ) + ( 12 - monthsStart ) ); break; case 'y': case 'yy': case 'year': case 'years': returns = years; break; case 'd': case 'dd': case 'day': case 'days': returns = ( ( end - start ) / ( 1000 * 60 * 60 * 24 ) ); break; } return returns; } 

Uso

var qtMonths = DateDiff (‘mm’, nova data (‘2015-05-05’), nova data ());

var qtYears = DateDiff (‘yy’, nova data (‘2015-05-05’), nova data ());

var qtDays = DateDiff (‘dd’, nova Data (‘2015-05-05’), nova Data ());

OU

var qtMonths = DateDiff (‘m’, nova Data (‘2015-05-05’), nova Data ()); // m || y || d

var qtMonths = DateDiff (‘mês’, nova Data (‘2015-05-05’), nova Data ()); // mês || ano || dia

var qtMonths = DateDiff (‘months’, new Date (‘2015-05-05’), new Date ()); // meses || anos || dias

 var DateDiff = function (type, start, end) { let // or var years = end.getFullYear() - start.getFullYear(), monthsStart = start.getMonth(), monthsEnd = end.getMonth() ; if(['m', 'mm', 'month', 'months'].includes(type)/*ES6*/) return ( ( ( years * 12 ) - ( 12 - monthsEnd ) ) + ( 12 - monthsStart ) ); else if(['y', 'yy', 'year', 'years'].includes(type)) return years; else if (['d', 'dd', 'day', 'days'].indexOf(type) !== -1/*EARLIER JAVASCRIPT VERSIONS*/) return ( ( end - start ) / ( 1000 * 60 * 60 * 24 ) ); else return -1; } 
Intereting Posts