validar restar obtener inicio horas hora formato fin fechas fecha comparar actual javascript date

obtener - restar fechas javascript



Obtener diferencia entre 2 fechas en JavaScript? (7)

Una solución más correcta

... ya que las fechas naturalmente tienen información de zona horaria, que puede abarcar regiones con diferentes ajustes de ahorro de luz diurna

Las respuestas anteriores a esta pregunta no tienen en cuenta los casos en que las dos fechas en cuestión abarcan un cambio en el horario de verano (DST). La fecha en la que se produce el cambio de DST tendrá una duración en milisegundos, que es != 1000*60*60*24 , por lo que el cálculo típico fallará.

Puede solucionar esto al primero normalizando las dos fechas a UTC, y luego calculando la diferencia entre esas dos fechas UTC.

Ahora, la solución se puede escribir como,

const _MS_PER_DAY = 1000 * 60 * 60 * 24; // a and b are javascript Date objects function dateDiffInDays(a, b) { // Discard the time and time-zone information. const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); return Math.floor((utc2 - utc1) / _MS_PER_DAY); } // test it const a = new Date("2017-01-01"), b = new Date("2017-07-25"), difference = dateDiffInDays(a, b);

Esto funciona porque la hora UTC nunca observa el horario de verano. Ver ¿UTC observa el horario de verano?

ps Después de analizar algunos de los comentarios sobre esta respuesta, una vez que haya comprendido los problemas con las fechas de javascript que abarcan un límite de horario de verano, es probable que haya más de una forma de resolverlo. Lo que proporcioné anteriormente es una solución simple (y probada). Me interesaría saber si existe una solución aritmética / matemática simple en lugar de tener que crear una instancia de los dos nuevos objetos Date. Eso podría ser potencialmente más rápido.

Esta pregunta ya tiene una respuesta aquí:

¿Cómo obtengo la diferencia entre 2 fechas en días completos (no quiero ninguna fracción de un día)

var date1 = new Date(''7/11/2010''); var date2 = new Date(''12/12/2010''); var diffDays = date2.getDate() - date1.getDate(); alert(diffDays)

Probé lo anterior pero esto no funcionó.


1000000% seguro ...............

<script> function myFunction() { var date1=new Date();// for current date var date2 =new Date("Sep, 30, 2015"); // for other date you can get the another date from a textbox by // var Newdate=document.getElementById(''<%=textBox1.ClientID%>'').value; // convert Newdate to dateTime by...... var date2=New Date(Newdate); var yearDiff=date1.getFullYear()-date2.getFullYear();// for year difference var y1=date1.getFullYear(); var y2=date2.getFullYear(); var monthDiff=(date1.getMonth() + y1*12)-(date2.getMonth() +y2*12); var day1=parseInt(date1.getDate()); var day2=parseInt(date2.getDate()); var dayDiff= (day1-day2)+ (monthDiff * 30); document.write("Number of day difference : "+dayDiff); } </script>


Aquí hay una solución usando moment.js :

var a = moment(''7/11/2010'',''M/D/YYYY''); var b = moment(''12/12/2010'',''M/D/YYYY''); var diffDays = b.diff(a, ''days''); alert(diffDays);

Usé sus valores de entrada originales, pero no especificó el formato, así que asumí que el primer valor fue el 11 de julio. Si se pretendía que fuera el 7 de noviembre, ajuste el formato a D/M/YYYY .


Este es el código para restar una fecha de otra. Este ejemplo convierte las fechas en objetos, ya que la función getTime () no funcionará a menos que sea un objeto Date.

var dat1 = document.getElementById(''inputDate'').value; var date1 = new Date(dat1)//converts string to date object alert(date1); var dat2 = document.getElementById(''inputFinishDate'').value; var date2 = new Date(dat2) alert(date2); var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds var diffDays = Math.abs((date1.getTime() - date2.getTime()) / (oneDay)); alert(diffDays);


Probé de muchas maneras y descubrí que usar datepicker era el mejor, pero el formato de la fecha causa problemas con JavaScript ...

Así que aquí está mi respuesta y se puede ejecutar fuera de la caja.

<input type="text" id="startdate"> <input type="text" id="enddate"> <input type="text" id="days"> <script src="https://code.jquery.com/jquery-1.8.3.js"></script> <script src="https://code.jquery.com/ui/1.10.0/jquery-ui.js"></script> <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/redmond/jquery-ui.css" /> <script> $(document).ready(function() { $( "#startdate,#enddate" ).datepicker({ changeMonth: true, changeYear: true, firstDay: 1, dateFormat: ''dd/mm/yy'', }) $( "#startdate" ).datepicker({ dateFormat: ''dd-mm-yy'' }); $( "#enddate" ).datepicker({ dateFormat: ''dd-mm-yy'' }); $(''#enddate'').change(function() { var start = $(''#startdate'').datepicker(''getDate''); var end = $(''#enddate'').datepicker(''getDate''); if (start<end) { var days = (end - start)/1000/60/60/24; $(''#days'').val(days); } else { alert ("You cant come back before you have been!"); $(''#startdate'').val(""); $(''#enddate'').val(""); $(''#days'').val(""); } }); //end change function }); //end ready </script>

un violín se puede ver aquí DEMO


Aquí hay una forma :

var date1 = new Date("7/13/2010"); var date2 = new Date("12/15/2010"); var timeDiff = Math.abs(date2.getTime() - date1.getTime()); var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); alert(diffDays);

Observe que necesitamos encerrar la fecha entre comillas. El resto del código obtiene la diferencia de tiempo en milisegundos y luego se divide para obtener el número de días. Fecha espera formato mm / dd / aaaa.


var date1 = new Date("7/11/2010"); var date2 = new Date("8/11/2010"); var diffDays = parseInt((date2 - date1) / (1000 * 60 * 60 * 24)); alert(diffDays )