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

sumar - Número de respuesta de Javascript de días, horas, minutos, segundos entre dos fechas



restar horas con moment js (8)

¿Alguien puede vincularme a algún tutorial donde pueda averiguar cómo devolver días, horas, minutos, segundos en javascript entre 2 fechas de unix?

Yo tengo:

var date_now = unixtimestamp; var date_future = unixtimestamp;

Me gustaría devolver (en vivo) cuántos días, horas, minutos, segundos quedan desde la fecha_hora hasta la fecha_futuro.


Aquí está en javascript: (Por ejemplo, la fecha futura es el día de Año Nuevo)

DEMO (actualizaciones cada segundo)

var dateFuture = new Date(new Date().getFullYear() +1, 0, 1); var dateNow = new Date(); var seconds = Math.floor((dateFuture - (dateNow))/1000); var minutes = Math.floor(seconds/60); var hours = Math.floor(minutes/60); var days = Math.floor(hours/24); hours = hours-(days*24); minutes = minutes-(days*24*60)-(hours*60); seconds = seconds-(days*24*60*60)-(hours*60*60)-(minutes*60);


Aquí hay un ejemplo de código. Usé cálculos simples en lugar de usar cálculos previos, como 1 día es 86400 segundos. Entonces puedes seguir la lógica con facilidad.

// Calculate time between two dates: var date1 = new Date(''1110-01-01 11:10''); var date2 = new Date(); console.log(''difference in ms'', date1 - date2); // Use Math.abs() so the order of the dates can be ignored and you won''t // end up with negative numbers when date1 is before date2. console.log(''difference in ms abs'', Math.abs(date1 - date2)); console.log(''difference in seconds'', Math.abs(date1 - date2) / 1000); var diffInSeconds = Math.abs(date1 - date2) / 1000; var days = Math.floor(diffInSeconds / 60 / 60 / 24); var hours = Math.floor(diffInSeconds / 60 / 60 % 24); var minutes = Math.floor(diffInSeconds / 60 % 60); var seconds = Math.floor(diffInSeconds % 60); var milliseconds = Math.round((diffInSeconds - Math.floor(diffInSeconds)) * 1000); console.log(''days'', days); console.log(''hours'', (''0'' + hours).slice(-2)); console.log(''minutes'', (''0'' + minutes).slice(-2)); console.log(''seconds'', (''0'' + seconds).slice(-2)); console.log(''milliseconds'', (''00'' + milliseconds).slice(-3));


La mejor biblioteca que conozco para el desglose de la duración es countdown.js . Maneja todos los casos difíciles como los años bisiestos y los ahorros de luz diurna como se mencionó en el csg , e incluso le permite especificar conceptos confusos tales como meses y semanas. Aquí está el código para su caso:

//assuming these are in *seconds* (in case of MS don''t multiply by 1000 below) var date_now = 1218374; var date_future = 29384744; diff = countdown(date_now * 1000, date_future * 1000, countdown.DAYS | countdown.HOURS | countdown.MINUTES | countdown.SECONDS); alert("days: " + diff.days + " hours: " + diff.hours + " minutes: " + diff.minutes + " seconds: " + diff.seconds); //or even better alert(diff.toString());

Aquí hay un JSFiddle , pero probablemente solo funcionaría en Firefox o en Chrome con la seguridad web deshabilitada, ya que countdown.js está alojado con un tipo de texto / MIME simple (se supone que debes servir el archivo, no el enlace a countdownjs.org) .


Lo llamo el "método snowman-carl" "y creo que es un poco más flexible cuando se necesitan tiempos adicionales como semanas, polillas, años, siglos ... y no quiero demasiados códigos repetitivos:

var d = Math.abs(date_future - date_now) / 1000; // delta var r = {}; // result var s = { // structure year: 31536000, month: 2592000, week: 604800, // uncomment row to ignore day: 86400, // feel free to add your own row hour: 3600, minute: 60, second: 1 }; Object.keys(s).forEach(function(key){ r[key] = Math.floor(d / s[key]); d -= r[key] * s[key]; }); // for example: {year:0,month:0,week:1,day:2,hour:34,minute:56,second:7} console.log(r);

Ten una FIDDLE

Inspirado por la respuesta de .


Solo calcula la diferencia en segundos (no olvides que las marcas de tiempo de JS se miden en milisegundos) y descompone ese valor:

// get total seconds between the times var delta = Math.abs(date_future - date_now) / 1000; // calculate (and subtract) whole days var days = Math.floor(delta / 86400); delta -= days * 86400; // calculate (and subtract) whole hours var hours = Math.floor(delta / 3600) % 24; delta -= hours * 3600; // calculate (and subtract) whole minutes var minutes = Math.floor(delta / 60) % 60; delta -= minutes * 60; // what''s left is seconds var seconds = delta % 60; // in theory the modulus is not required

El código EDIT se ajustó porque me di cuenta de que el código original arrojaba el número total de horas, etc., y no el número de horas que quedaban después de contar los días completos.


Tenga en cuenta que el cálculo basado únicamente en las diferencias no cubrirá todos los casos: años bisiestos y cambio de "horario de verano".

Javascript tiene poca biblioteca incorporada para trabajar con las fechas. Sugiero que use una biblioteca de JavaScript de terceros, por ejemplo, MomentJS ; puedes ver here la función que estabas buscando.


aquí hay un código para encontrar la diferencia entre dos fechas en Días, Horas, Minutos, Segundos (suponiendo que la fecha futura es la fecha del año nuevo).

var one_day = 24*60*60*1000; // total milliseconds in one day var today = new Date(); var new_year = new Date("01/01/2017"); // future date var today_time = today.getTime(); // time in miliiseconds var new_year_time = new_year.getTime(); var time_diff = Math.abs(new_year_time - today_time); //time diff in ms var days = Math.floor(time_diff / one_day); // no of days var remaining_time = time_diff - (days*one_day); // remaining ms var hours = Math.floor(remaining_time/(60*60*1000)); remaining_time = remaining_time - (hours*60*60*1000); var minutes = Math.floor(remaining_time/(60*1000)); remaining_time = remaining_time - (minutes * 60 * 1000); var seconds = Math.ceil(remaining_time / 1000);


function update(datetime = "2017-01-01 05:11:58") { var theevent = new Date(datetime); now = new Date(); var sec_num = (theevent - now) / 1000; var days = Math.floor(sec_num / (3600 * 24)); var hours = Math.floor((sec_num - (days * (3600 * 24)))/3600); var minutes = Math.floor((sec_num - (days * (3600 * 24)) - (hours * 3600)) / 60); var seconds = Math.floor(sec_num - (days * (3600 * 24)) - (hours * 3600) - (minutes * 60)); if (hours < 10) {hours = "0"+hours;} if (minutes < 10) {minutes = "0"+minutes;} if (seconds < 10) {seconds = "0"+seconds;} return days+'':''+ hours+'':''+minutes+'':''+seconds; }