una tablas tabla recorrer obtener filas ejemplos editar dinamicas datos con agregar javascript date datetime timespan datejs

tablas - Trabajar con un lapso de tiempo en Javascript



tablas dinamicas html jquery (5)

Usando Date.js ya, pero también puede usar otra biblioteca si es necesario.

No estoy seguro de cuál es la mejor manera de trabajar con los deltas del tiempo. Específicamente, quiero mostrar el tiempo que ha transcurrido desde ahora hasta una fecha y hora anterior.

Así que necesito hacer algo como esto:

var elapsed_time = new Date() - pastDate; pastDate.toString(''days-hours-minutes-seconds'');

Logré que funcionara principalmente con Date.js, pero el problema ahora es que estoy trabajando con un objeto Date y no con un intervalo de tiempo, por lo que lo que debería ser un período de 23 horas es 23 horas después de la primera vez que Date:

var result = (new Date()) - past_date; "result" is the number (probably milliseconds): 15452732

var result = (new Date() - past_date "result" is a date from 1969: Wed Dec 31 1969 23:17:32

Lo que necesito es:

0 days 23 hours 17 minutes and 32 seconds

¿Algunas ideas?


Moment.js proporciona dicha funcionalidad:

moment.js

Está bien documentada y bonita biblioteca.

Debe ir a lo largo de las líneas "Duración" y "Humanizar API" http://momentjs.com/docs/#/displaying/from/

var d1, d2; // Timepoints var differenceInPlainText = moment(a).from(moment(b), true); // Add true for suffixless text


Puedes usar el objeto moment.js duration

Ejemplo:

const diff = moment.duration(Date.now() - new Date(2010, 1, 1)) console.log(`${diff.years()} years ${diff.months()} months ${diff.days()} days ${diff.hours()} hours ${diff.minutes()} minutes and ${diff.seconds()} seconds`)


Si no está demasiado preocupado en cuanto a la precisión después de días, simplemente puede hacer los cálculos.

function timeSince(when) { // this ignores months var obj = {}; obj._milliseconds = (new Date()).valueOf() - when.valueOf(); obj.milliseconds = obj._milliseconds % 1000; obj._seconds = (obj._milliseconds - obj.milliseconds) / 1000; obj.seconds = obj._seconds % 60; obj._minutes = (obj._seconds - obj.seconds) / 60; obj.minutes = obj._minutes % 60; obj._hours = (obj._minutes - obj.minutes) / 60; obj.hours = obj._hours % 24; obj._days = (obj._hours - obj.hours) / 24; obj.days = obj._days % 365; // finally obj.years = (obj._days - obj.days) / 365; return obj; }

entonces timeSince(pastDate); y usa las propiedades como quieras.

De lo contrario , puede usar .getUTC* para calcularlo, pero tenga en cuenta que puede ser un poco más lento de calcular

function timeSince(then) { var now = new Date(), obj = {}; obj.milliseconds = now.getUTCMilliseconds() - then.getUTCMilliseconds(); obj.seconds = now.getUTCSeconds() - then.getUTCSeconds(); obj.minutes = now.getUTCMinutes() - then.getUTCMinutes(); obj.hours = now.getUTCHours() - then.getUTCHours(); obj.days = now.getUTCDate() - then.getUTCDate(); obj.months = now.getUTCMonth() - then.getUTCMonth(); obj.years = now.getUTCFullYear() - then.getUTCFullYear(); // fix negatives if (obj.milliseconds < 0) --obj.seconds, obj.milliseconds = (obj.milliseconds + 1000) % 1000; if (obj.seconds < 0) --obj.minutes, obj.seconds = (obj.seconds + 60) % 60; if (obj.minutes < 0) --obj.hours, obj.minutes = (obj.minutes + 60) % 60; if (obj.hours < 0) --obj.days, obj.hours = (obj.hours + 24) % 24; if (obj.days < 0) { // months have different lengths --obj.months; now.setUTCMonth(now.getUTCMonth() + 1); now.setUTCDate(0); obj.days = (obj.days + now.getUTCDate()) % now.getUTCDate(); } if (obj.months < 0) --obj.years, obj.months = (obj.months + 12) % 12; return obj; }


Suena como que necesitas moment.js

p.ej

moment().subtract(''days'', 6).calendar();

=> el domingo pasado a las 8:23 pm

moment().startOf(''hour'').fromNow();

=> Hace 26 minutos

Editar:

Cálculo de datos de fecha de JS puro:

var date1 = new Date("7/Nov/2012 20:30:00"); var date2 = new Date("20/Nov/2012 19:15:00"); var diff = date2.getTime() - date1.getTime(); var days = Math.floor(diff / (1000 * 60 * 60 * 24)); diff -= days * (1000 * 60 * 60 * 24); var hours = Math.floor(diff / (1000 * 60 * 60)); diff -= hours * (1000 * 60 * 60); var mins = Math.floor(diff / (1000 * 60)); diff -= mins * (1000 * 60); var seconds = Math.floor(diff / (1000)); diff -= seconds * (1000); document.write(days + " days, " + hours + " hours, " + mins + " minutes, " + seconds + " seconds");


/** * 计算时间对象与当前时间的差距,并显示友好的文本 * English: Calculating the difference between the given time and the current time and then showing the results. */ function date2Text(date) { var milliseconds = new Date() - date; var timespan = new TimeSpan(milliseconds); if (milliseconds < 0) { return timespan.toString() + "之后"; }else{ return timespan.toString() + "前"; } } /** * 用于计算时间间隔的对象 * English: Using a function to calculate the time interval * @param milliseconds 毫秒数 */ var TimeSpan = function (milliseconds) { milliseconds = Math.abs(milliseconds); var days = Math.floor(milliseconds / (1000 * 60 * 60 * 24)); milliseconds -= days * (1000 * 60 * 60 * 24); var hours = Math.floor(milliseconds / (1000 * 60 * 60)); milliseconds -= hours * (1000 * 60 * 60); var mins = Math.floor(milliseconds / (1000 * 60)); milliseconds -= mins * (1000 * 60); var seconds = Math.floor(milliseconds / (1000)); milliseconds -= seconds * (1000); return { getDays: function () { return days; }, getHours: function () { return hours; }, getMinuts: function () { return mins; }, getSeconds: function () { return seconds; }, toString: function () { var str = ""; if (days > 0 || str.length > 0) { str += days + "天"; } if (hours > 0 || str.length > 0) { str += hours + "小时"; } if (mins > 0 || str.length > 0) { str += mins + "分钟"; } if (days == 0 && (seconds > 0 || str.length > 0)) { str += seconds + "秒"; } return str; } } }