una sumar restar moment horas hora habiles funciones fechas fecha entre dias con calcular actual javascript html date

javascript - sumar - ¿Cómo calcular el número de días entre dos fechas?



restar horas javascript (7)

Ajustado para permitir las diferencias de horario de verano. prueba esto:

function daysBetween(date1, date2) { // adjust diff for for daylight savings var hoursToAdjust = Math.abs(date1.getTimezoneOffset() /60) - Math.abs(date2.getTimezoneOffset() /60); // apply the tz offset date2.addHours(hoursToAdjust); // The number of milliseconds in one day 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 = Math.abs(date1_ms - date2_ms) // Convert back to days and return return Math.round(difference_ms/ONE_DAY) } // you''ll want this addHours function too Date.prototype.addHours= function(h){ this.setHours(this.getHours()+h); return this; }

Esta pregunta ya tiene una respuesta aquí:

  1. Estoy calculando el número de días entre la fecha ''de'' y ''hasta''. Por ejemplo, si la fecha de inicio es 13/04/2010 y la de fecha es 15/04/2010, el resultado debe ser

  2. ¿Cómo obtengo el resultado usando JavaScript?


Aquí está mi implementación:

function daysBetween(one, another) { return Math.round(Math.abs((+one) - (+another))/8.64e7); }

+<date> hace el tipo de coerción a la representación de enteros y tiene el mismo efecto que <date>.getTime() y 8.64e7 es el número de milisegundos en un día.


Aquí hay una función que hace esto:

function days_between(date1, date2) { // The number of milliseconds in one day 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 = Math.abs(date1_ms - date2_ms); // Convert back to days and return return Math.round(difference_ms/ONE_DAY); }


De mi pequeña calculadora de diferencia de fecha:

var startDate = new Date(2000, 1-1, 1); // 2000-01-01 var endDate = new Date(); // Today // Calculate the difference of two dates in total days function diffDays(d1, d2) { var ndays; var tv1 = d1.valueOf(); // msec since 1970 var tv2 = d2.valueOf(); ndays = (tv2 - tv1) / 1000 / 86400; ndays = Math.round(ndays - 0.5); return ndays; }

Así que llamarías:

var nDays = diffDays(startDate, endDate);

(Fuente completa en http://david.tribble.com/src/javascript/jstimespan.html .)

Apéndice

El código se puede mejorar cambiando estas líneas:

var tv1 = d1.getTime(); // msec since 1970 var tv2 = d2.getTime();


Esto es lo que yo uso. Si simplemente resta las fechas, no funcionará a través del límite del horario de ahorro de luz diurna (por ejemplo, del 1 de abril al 30 de abril o del 1 de octubre al 31 de octubre). Esto elimina todas las horas para asegurarse de tener un día y elimina cualquier problema de horario de verano mediante el uso de UTC.

var nDays = ( Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate()) - Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate())) / 86400000;


He escrito esta solución para otra publicación que preguntó cómo calcular la diferencia entre dos fechas, así que comparto lo que he preparado:

// Here are the two dates to compare var date1 = ''2011-12-24''; var date2 = ''2012-01-01''; // First we split the values to arrays date1[0] is the year, [1] the month and [2] the day date1 = date1.split(''-''); date2 = date2.split(''-''); // Now we convert the array to a Date object, which has several helpful methods date1 = new Date(date1[0], date1[1], date1[2]); date2 = new Date(date2[0], date2[1], date2[2]); // We use the getTime() method and get the unixtime (in milliseconds, but we want seconds, therefore we divide it through 1000) date1_unixtime = parseInt(date1.getTime() / 1000); date2_unixtime = parseInt(date2.getTime() / 1000); // This is the calculated difference in seconds var timeDifference = date2_unixtime - date1_unixtime; // in Hours var timeDifferenceInHours = timeDifference / 60 / 60; // and finaly, in days :) var timeDifferenceInDays = timeDifferenceInHours / 24; alert(timeDifferenceInDays);

Puede omitir algunos pasos en el código, lo he escrito para que sea fácil de entender.

Encontrará un ejemplo en ejecución aquí: http://jsfiddle.net/matKX/


var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds var firstDate = new Date(2008,01,12); var secondDate = new Date(2008,01,22); var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));