2010-12-14 8 views
8

fecha He mirado en: Get difference between 2 dates in javascript?Javascript a diferencia

Y todavía no puedo conseguir que esto funcione.

var difference = data.List[0].EndDate - Math.round(new Date().getTime()/1000.0) * 1000; 
var daysRemaining = Math.floor(difference/1000/60/60/24); 
var hoursRemaining = Math.floor(difference/1000/60/60 - (24 * daysRemaining)); 
var minutesRemaining = Math.floor(difference/1000/60 - (24 * 60 * daysRemaining) - (60 * hoursRemaining)); 
var secondsRemaining = Math.floor(difference/1000 - (24 * 60 * 60 * daysRemaining) - (60 * 60 * hoursRemaining) - (60 * minutesRemaining)); 

Data.List [0] .EndDate es un número UTC (como: 1291427809310 (http://www.epochconverter.com/)) que siempre va a ser posterior a la fecha actual.

+0

¿qué esperas de la salida? –

+0

para tener las horas, minutos y segundos correctos restantes. – williamparry

+1

¿Qué significa "No puedo hacer que funcione" exactamente? – epascarello

Respuesta

5

Usted dice que UTC fecha/hora es "2004-09-16T23: 59: 58.75"?

Por lo que están haciendo básicamente

var x = "2004-09-16T23:59:58.75" - 123456 

Ahora que aclaró que, de lo anterior no se aplica. Su nuevo problema es que la cantidad de milisegundos está en el pasado, por lo tanto, cuando realiza el cálculo de la diferencia, obtiene un número negativo. Es probable que quiera cambiar el orden.

var difference = new Date().getTime()-data.List[0].EndDate; 
+0

lo siento mal, es un número como 1291427809310 – williamparry

+0

Se ha agregado nueva información basada en lo que dices en el comentario – epascarello

3

Si EndDate es en milisegundos, y getTime() devuelve milisegundos, ¿por qué se divide por 1.000 sólo para multiplicar por 1000 en la misma línea? Y si solo necesita una segunda precisión para todo el resto del código, ¿por qué trabajar en milisegundos? Comienzan con un número de segundos para simplificar todos sus cálculos:

var difference = Math.round((data.List[0].EndDate - new Date().getTime())/1000); 
11
function days_between(date1, date2) { 

    // The number of milliseconds in one day 
    var ONE_DAY = 1000 * 60 * 60 * 24 

    // Convert both dates to milliseconds 
    var date1_ms = date1.getTime() 
    var date2_ms = date2.getTime() 

    // Calculate the difference in milliseconds 
    var difference_ms = Math.abs(date1_ms - date2_ms) 

    // Convert back to days and return 
    return Math.round(difference_ms/ONE_DAY) 

} 

http://www.mcfedries.com/javascript/daysbetween.asp

+6

Esto no se ocupa de los casos donde date1 y date2 se extienden a través un evento de cambio de ahorro de luz diurna. Ver http://stackoverflow.com/a/15289883/850996 –

+0

¿En qué formato debería pasar la fecha? – nirav

0

escribí un component que hace exactamente esto si no desea usar una biblioteca completa y me gusta moment.js También puede mostrar la diferencia en cualquier unidad de tiempo que necesite (días, semanas, meses, minutos, horas, etc.).

Así es como funcionaría:

var date1 = date.getTime(); 
var date2 = data.List[0].EndDate; 

var millisecondsRemaining = dateDiff(date1, date2, 'milliseconds'); 
var secondsRemaining = dateDiff(date1, date2, 'seconds'); 
var minutesRemaining = dateDiff(date1, date2, 'minutes'); 
var hoursRemaining = dateDiff(date1, date2, 'hours'); 
var daysRemaining = dateDiff(date1, date2, 'days'); 
var weeksRemaining = dateDiff(date1, date2, 'weeks'); 
var monthsRemaining = dateDiff(date1, date2, 'months'); 
var yearsRemaining = dateDiff(date1, date2, 'years'); 

Para utilizar el método DateDiff() sólo puede importar el componente.

Cuestiones relacionadas