2008-11-29 8 views
33

Haciendo una función en Javascript como VisualBasic DateDiff.Cuál es la mejor manera de calcular la diferencia de fecha en Javascript

dar dos fechas y el intervalo de tiempo de regresar (segundos, minutos, días, etc ...)

DateDiff(ByVal Interval As Microsoft.VisualBasic.DateInterval, _ 
    ByVal Date1 As Date, ByVal Date2 As Date) as Long 

¿Cuál es la mejor manera de calcular la diferencia de fechas de Javascript?

+1

Duplicado: http://stackoverflow.com/questions/41948/how-do-i-get-the-difference-between-two-dates-in-javascript –

Respuesta

49

Utilice la Date object así:

function DateDiff(var /*Date*/ date1, var /*Date*/ date2) { 
    return date1.getTime() - date2.getTime(); 
} 

Esto devolverá el número de milisegundos diferencia entre las dos fechas. Convertirlo a segundos, minutos, horas, etc. no debería ser demasiado difícil.

+29

No necesita utilizar 'getTime'. Si acaba de hacer 'return date1 - date2;', el resultado es el mismo. (Y eso no es algo específico de la implementación, está en la especificación, aunque de manera indirecta). –

+3

Recomendaría usar 'return date2.getTime() - date1.getTime();' para que el orden de las fechas sea el esperado (de lo contrario, se devolverá un número negativo). – kingjeffrey

+1

Esta respuesta es aceptada, pero está mal, desafortunadamente. Pruebe el código 'new Date (new Date() - new Date());' –

4

Si sigue este tutorial, una forma es utilizar:

Date.getTime() 

encontrará una completa javascript function here, con fecha de validación.

Dicho esto, según lo comentado por Rafi B. 5 años después, "Get difference between 2 dates in javascript?" es más preciso.

var _MS_PER_DAY = 1000 * 60 * 60 * 24; 

// a and b are javascript Date objects 
function dateDiffInDays(a, b) { 
    // Discard the time and time-zone information. 
    var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); 
    var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); 

    return Math.floor((utc2 - utc1)/_MS_PER_DAY); 
} 
+0

Da la hora incorrecta, si pones 2PM a 11.59PM en el mismo día. En lugar de dar 10 horas, da 10:59. ¿Puedes comprobarlo? – jewelhuq

+0

@jewelhuq 8 años después, necesitaría un poco más de detalles. ¿Puedes hacer una pregunta por separado? – VonC

+0

var start = new Date ("2016-12-24 14:00"); var end = new Fecha ("2016-12-24 23:59"); var diffMs = (end.getTime() - start.getTime()); // milisegundos entre ahora y Navidad var diffDays = Math.round (diffMs/86400000); // días var diffHrs = Math.round ((diffMs% 86400000)/3600000); // hours ar diffMins = Math.round (((diffMs% 86400000)% 3600000)/60000); // minutos console.log (diffHrs); está regresando a las 10: 59h, funciona bien hasta las 23:00. ¿Cuál es el problema? – jewelhuq

Cuestiones relacionadas