tag parejas edad diferencia con change body aƱos javascript datetime datediff

parejas - Diferencia entre fechas en JavaScript



title html (6)

¿Cómo encontrar la diferencia entre dos fechas?


Al usar el objeto Date y su valor de milisegundos, se pueden calcular las diferencias:

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

Puede obtener la cantidad de segundos (como un número entero / entero) dividiendo los milisegundos por 1000 para convertirlo a segundos y luego convertir el resultado en un entero (esto elimina la parte fraccionaria que representa los milisegundos):

var seconds = parseInt((b-a)/1000);

Luego puede obtener minutes enteros dividiendo los seconds entre 60 y convirtiéndolos en un número entero, luego hours dividiendo los minutes entre 60 y convirtiéndolos en un número entero, luego las unidades de tiempo más largo de la misma manera. A partir de esto, se puede crear una función para obtener la cantidad máxima máxima de una unidad de tiempo en el valor de una unidad inferior y la unidad inferior restante:

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.

Si se pregunta cuáles son los parámetros de entrada proporcionados anteriormente para el segundo Date , consulte sus nombres a continuación:

new Date(<year>, <month>, <day>, <hours>, <minutes>, <seconds>, <milliseconds>);

Como se señala en los comentarios de esta solución, no es necesario que proporcione todos estos valores a menos que sean necesarios para la fecha que desea representar.


He encontrado esto y funciona bien para mí:

Cálculo de la diferencia entre dos fechas conocidas

Desafortunadamente, calcular un intervalo de fechas como días, semanas o meses entre dos fechas conocidas no es tan fácil porque no puede simplemente agregar objetos de fecha juntos. Para usar un objeto Date en cualquier tipo de cálculo, primero debemos recuperar el valor de milisegundos interno de Date, que se almacena como un entero grande. La función para hacer eso es Date.getTime (). Una vez que ambas Fechas se han convertido, restando la última de la anterior devuelve la diferencia en milisegundos. El intervalo deseado puede determinarse dividiendo ese número por el número correspondiente de milisegundos. Por ejemplo, para obtener el número de días para una cantidad dada de milisegundos, dividiríamos por 86,400,000, la cantidad de milisegundos por día (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));

El redondeo es opcional, dependiendo de si desea días parciales o no.

Reference


Si está buscando una diferencia expresada como una combinación de años, meses y días, sugeriría esta función:

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

Esta solución tratará los años bisiestos (29 de febrero) y las diferencias en la duración del mes de una manera que haríamos naturalmente (creo).

Por ejemplo, el intervalo entre el 28 de febrero de 2015 y el 28 de marzo de 2015 se considerará exactamente un mes, no 28 días. Si ambos días son en 2016, la diferencia seguirá siendo exactamente un mes, no 29 días.

Las fechas con exactamente el mismo mes y día, pero diferentes años, siempre tendrán una diferencia de un número exacto de años. Entonces la diferencia entre 2015-03-01 y 2016-03-01 será exactamente 1 año, no 1 año y 1 día (debido a contar 365 días como 1 año).


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


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'', nueva fecha (''2015-05-05''), nueva fecha ());

var qtYears = DateDiff (''yy'', nueva fecha (''2015-05-05''), nueva fecha ());

var qtDays = DateDiff (''dd'', nueva fecha (''2015-05-05''), nueva fecha ());

O

var qtMonths = DateDiff (''m'', nueva fecha (''2015-05-05''), nueva fecha ()); // m || y || re

var qtMonths = DateDiff (''mes'', nueva fecha (''2015-05-05''), nueva fecha ()); // mes || año || día

var qtMonths = DateDiff (''meses'', nueva fecha (''2015-05-05''), nueva fecha ()); // meses || años || 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; }