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