una sumar restar moment meses horas habiles fechas fecha entre dias con comparar calcular años actual javascript date

javascript - sumar - restar horas con moment js



¿Cómo obtengo la diferencia entre dos fechas en JavaScript? (16)

Estoy creando una aplicación que te permite definir eventos con un marco de tiempo. Quiero completar automáticamente la fecha de finalización cuando el usuario selecciona o cambia la fecha de inicio. Sin embargo, no puedo entender cómo obtener la diferencia entre las dos veces y cómo crear una nueva Fecha de finalización usando esa diferencia.


Dependiendo de sus necesidades, esta función calculará la diferencia entre los 2 días y devolverá un resultado en días decimales.

// This one returns a signed decimal. The sign indicates past or future. this.getDateDiff = function(date1, date2) { return (date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24); } // This one always returns a positive decimal. (Suggested by Koen below) this.getDateDiff = function(date1, date2) { return Math.abs((date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24)); }


ESTO ES LO QUE HICE EN MI SISTEMA.

var startTime=("08:00:00").split(":"); var endTime=("16:00:00").split(":"); var HoursInMinutes=((parseInt(endTime[0])*60)+parseInt(endTime[1]))-((parseInt(startTime[0])*60)+parseInt(startTime[1])); console.log(HoursInMinutes/60);


Gracias @ Vincent Robert , terminé usando tu ejemplo básico, aunque en realidad es newBegin + oldEnd - oldBegin . Aquí está la solución final simplificada:

// don''t update end date if there''s already an end date but not an old start date if (!oldEnd || oldBegin) { var selectedDateSpan = 1800000; // 30 minutes if (oldEnd) { selectedDateSpan = oldEnd - oldBegin; } newEnd = new Date(newBegin.getTime() + selectedDateSpan)); }


JavaScript es perfectamente compatible con la diferencia de fecha fuera de la caja

var msMinute = 60*1000, msDay = 60*60*24*1000, a = new Date(2012, 2, 12, 23, 59, 59), b = new Date("2013 march 12"); console.log(Math.floor((b - a) / msDay) + '' full days between''); console.log(Math.floor(((b - a) % msDay) / msMinute) + '' full minutes between'');

Ahora algunas trampas. Prueba esto:

console.log(a - 10); console.log(a + 10);

Entonces, si tiene riesgo de agregar un número y una Fecha, convierta la Fecha al number directamente.

console.log(a.getTime() - 10); console.log(a.getTime() + 10);

Mi primer ejemplo demuestra el poder del objeto Date pero en realidad parece ser una bomba de tiempo


Si no le importa el componente de tiempo, puede usar .getDate() y .setDate() para simplemente establecer la parte de la fecha.

Entonces, para establecer su fecha de finalización en 2 semanas después de la fecha de inicio, haga algo como esto:

function GetEndDate(startDate) { var endDate = new Date(startDate.getTime()); endDate.setDate(endDate.getDate()+14); return endDate; }

Para devolver la diferencia (en días) entre dos fechas, haga esto:

function GetDateDiff(startDate, endDate) { return endDate.getDate() - startDate.getDate(); }

Finalmente, modifiquemos la primera función para que pueda tomar el valor devuelto por 2nd como parámetro:

function GetEndDate(startDate, days) { var endDate = new Date(startDate.getTime()); endDate.setDate(endDate.getDate() + days); return endDate; }


Si usa moment.js, hay una solución más simple, que le dará la diferencia en días en una sola línea de código.

moment(endDate).diff(moment(beginDate), ''days'');

Detalles adicionales se pueden encontrar en la página momento.js

Saludos, Miguel


Si usa objetos Date y luego usa la función getTime() para ambas fechas, le dará sus tiempos respectivos desde el 1 de enero de 1970 en un valor numérico. A continuación, puede obtener la diferencia entre estos números.

Si eso no lo ayuda, revise la documentación completa: http://www.w3schools.com/jsref/jsref_obj_date.asp


código modificado modificitaion alternativo ..

http://jsfiddle.net/vvGPQ/48/

showDiff(); function showDiff(){ var date1 = new Date("2013/01/18 06:59:00"); var date2 = new Date(); //Customise date2 for your required future time var diff = (date2 - date1)/1000; var diff = Math.abs(Math.floor(diff)); var years = Math.floor(diff/(365*24*60*60)); var leftSec = diff - years * 365*24*60*60; var month = Math.floor(leftSec/((365/12)*24*60*60)); var leftSec = leftSec - month * (365/12)*24*60*60; var days = Math.floor(leftSec/(24*60*60)); var leftSec = leftSec - days * 24*60*60; var hrs = Math.floor(leftSec/(60*60)); var leftSec = leftSec - hrs * 60*60; var min = Math.floor(leftSec/(60)); var leftSec = leftSec - min * 60; document.getElementById("showTime").innerHTML = "You have " + years + " years "+ month + " month " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds the life time has passed."; setTimeout(showDiff,1000); }


este código llena la duración de los años de estudio cuando ingresa la fecha de inicio y finalización (fecha de calificación acordada) del estudio y comprueba si la duración es inferior a un año. Si la alerta un mensaje, tenga en cuenta que hay tres elementos de entrada: el primer txtFromQualifDate y segundo txtQualifDate y tercer txtStudyYears

mostrará el resultado del número de años con la fracción

function getStudyYears() { if(document.getElementById(''txtFromQualifDate'').value != '''' && document.getElementById(''txtQualifDate'').value != '''') { var d1 = document.getElementById(''txtFromQualifDate'').value; var d2 = document.getElementById(''txtQualifDate'').value; var one_day=1000*60*60*24; var x = d1.split("/"); var y = d2.split("/"); var date1=new Date(x[2],(x[1]-1),x[0]); var date2=new Date(y[2],(y[1]-1),y[0]) var dDays = (date2.getTime()-date1.getTime())/one_day; if(dDays < 365) { alert("the date between start study and graduate must not be less than a year !"); document.getElementById(''txtQualifDate'').value = ""; document.getElementById(''txtStudyYears'').value = ""; return ; } var dMonths = Math.ceil(dDays / 30); var dYears = Math.floor(dMonths /12) + "." + dMonths % 12; document.getElementById(''txtStudyYears'').value = dYears; } }


Ver JsFiddle DEMO

var date1 = new Date(); var date2 = new Date("2015/07/30 21:59:00"); showDiff(); function showDiff(date1, date2){ var diff = (date2 - date1)/1000; var diff = Math.abs(Math.floor(diff)); var days = Math.floor(diff/(24*60*60)); var leftSec = diff - days * 24*60*60; var hrs = Math.floor(leftSec/(60*60)); var leftSec = leftSec - hrs * 60*60; var min = Math.floor(leftSec/(60)); var leftSec = leftSec - min * 60; document.getElementById("showTime").innerHTML = "You have " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds before death."; setTimeout(showDiff,1000); }

para su código HTML:

<div id="showTime"></div>


A continuación, el código devolverá los días que quedan desde hoy a la fecha de futuros.

Dependencias: jQuery y MomentJs.

var getDaysLeft = function (date) { var today = new Date(); var daysLeftInMilliSec = Math.abs(new Date(moment(today).format(''YYYY-MM-DD'')) - new Date(date)); var daysLeft = daysLeftInMilliSec / (1000 * 60 * 60 * 24); return daysLeft; }; getDaysLeft(''YYYY-MM-DD'');


En JavaScript, las fechas se pueden transformar en el número de milisegundos desde el epoc llamando al método getTime() o simplemente usando la fecha en una expresión numérica.

Entonces, para obtener la diferencia, solo resta las dos fechas.

Para crear una nueva fecha basada en la diferencia, simplemente pase el número de milisegundos en el constructor.

var oldBegin = ... var oldEnd = ... var newBegin = ... var newEnd = new Date(newBegin + oldEnd - oldBegin);

Esto debería funcionar

EDITAR : corrigió el error apuntado por @bdukes

EDITAR :

Para obtener una explicación del comportamiento, oldBegin , oldEnd y newBegin son instancias de Date . Llamar a los operadores + y - activará el autoenlace de Javascript y llamará automáticamente al método prototipo valueOf() de esos objetos. Sucede que el método valueOf() se implementa en el objeto Date como una llamada a getTime() .

Entonces, básicamente: date.getTime() === date.valueOf() === (0 + date) === (+date)


<html> <head> <script> function dayDiff() { var start = document.getElementById("datepicker").value; var end= document.getElementById("date_picker").value; var oneDay = 24*60*60*1000; var firstDate = new Date(start); var secondDate = new Date(end); var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay))); document.getElementById("leave").value =diffDays ; } </script> </head> <body> <input type="text" name="datepicker"value=""/> <input type="text" name="date_picker" onclick="function dayDiff()" value=""/> <input type="text" name="leave" value=""/> </body> </html>


function checkdate() { var indate = new Date() indate.setDate(dat) indate.setMonth(mon - 1) indate.setFullYear(year) var one_day = 1000 * 60 * 60 * 24 var diff = Math.ceil((indate.getTime() - now.getTime()) / (one_day)) var str = diff + " days are remaining.." document.getElementById(''print'').innerHTML = str.fontcolor(''blue'') }


function compare() { var end_actual_time = $(''#date3'').val(); start_actual_time = new Date(); end_actual_time = new Date(end_actual_time); var diff = end_actual_time-start_actual_time; var diffSeconds = diff/1000; var HH = Math.floor(diffSeconds/3600); var MM = Math.floor(diffSeconds%3600)/60; var formatted = ((HH < 10)?("0" + HH):HH) + ":" + ((MM < 10)?("0" + MM):MM) getTime(diffSeconds); } function getTime(seconds) { var days = Math.floor(leftover / 86400); //how many seconds are left leftover = leftover - (days * 86400); //how many full hours fits in the amount of leftover seconds var hours = Math.floor(leftover / 3600); //how many seconds are left leftover = leftover - (hours * 3600); //how many minutes fits in the amount of leftover seconds var minutes = leftover / 60; //how many seconds are left //leftover = leftover - (minutes * 60); alert(days + '':'' + hours + '':'' + minutes); }


var getDaysLeft = function (date1, date2) { var daysDiffInMilliSec = Math.abs(new Date(date1) - new Date(date2)); var daysLeft = daysDiffInMilliSec / (1000 * 60 * 60 * 24); return daysLeft; }; var date1=''2018-05-18''; var date2=''2018-05-25''; var dateDiff = getDaysLeft(date1, date2); console.log(dateDiff);