2010-01-07 38 views
115

Tengo dos fechas YYYY-MM-DD y ZZZZ-NN-EE¿Cuántos segundos entre dos fechas?

¿Cómo puedo saber cuántos segundos hay entre ellas?

+133

Intento dejar al menos media hora entre las fechas para evitar que me atrapen. –

+0

'aaaa-MM-dd' es claro (año, mes, día -nota que no están todos en mayúscula), pero ZZZZ-NN-EE no es así. Lo interpreto como (zona horaria, ???, día-en-semana). ¿Es semana en año? Si es así, eso habría sido 'ww'. Pero aún así necesitamos el año también para calcular la diferencia. ¿Puedes dar algunos de los valores de muestra reales? – BalusC

+0

haha ​​@ Comentario de Don Branson. –

Respuesta

170

estoy tomando AAAA & ZZZZ en el sentido de valores enteros que significan el año, MM & NN en el sentido de valores enteros que significa el mes del año y DD EE & como valores enteros que significa que el día de la mes.

var t1 = new Date(YYYY, MM, DD, 0, 0, 0, 0); 
var t2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0); 
var dif = t1.getTime() - t2.getTime(); 

var Seconds_from_T1_to_T2 = dif/1000; 
var Seconds_Between_Dates = Math.abs(Seconds_from_T1_to_T2); 

Una fuente de mano para futuras consultas es el MDN site

Alternativamente, si las fechas se presentan en un formato de JavaScript puede analizar

var dif = Date.parse(MM + " " + DD + ", " YYYY) - Date.parse(NN + " " + EE + ", " +ZZZZ); 

y entonces usted puede utilizar ese valor como la diferencia en milisegundos (dif en ambos ejemplos tiene el mismo significado)

+1

Solo los patrones utilizados en el ejemplo no son correctos. Los años de 4 dígitos se anotan con minúscula 'yyyy', meses de 2 dígitos con mayúscula' MM' y 2 días con minúscula 'dd'. – BalusC

+1

Utilicé el formato exacto en la pregunta para mayor claridad – Martin

+1

Martin, tengo la impresión de que no estaba usando ningún patrón de fecha aquí. MM DD, YYYY y NN EE, ZZZZ son en realidad los "valores de ejemplo" que Steven pidió. En otras palabras, él no está haciendo ningún tipo de formato. –

5

crear dos objetos Date y llamar a valueOf() en ambos, luego compararlos.

JavaScript Date Object Reference

+2

getSeconds() -> Devuelve los segundos. (El rango es 0-59).Debe ser valueOf() o getTime() – steven

59

Reste solo:

var a = new Date(); 
alert("Wait a few seconds, then click OK"); 

var b = new Date(); 
var difference = (b - a)/1000; 

alert("You waited: " + difference + " seconds"); 
+0

@ user3344977 - ¡entonces algo gracioso está pasando! Verifique los valores de 'a' y' b' y asegúrese de que sean fechas. – Seth

+0

@Seth estás en lo correcto, así que borré mi comentario ... una de mis "fechas" en realidad era una cadena. Esto funciona perfectamente – user3344977

4
var a = new Date("2010 jan 10"), 
    b = new Date("2010 jan 9"); 

alert(
    a + "\n" + 
    b + "\n" + 
    "Difference: " + ((+a - +b)/1000) 
); 
13

Si uno o ambos de sus fechas están en el futuro, entonces me temo que estás SOL si quieres precisión a la segunda. La hora UTC tiene segundos intercalares que no se conocen hasta aproximadamente 6 meses antes de que sucedan, por lo que cualquier fecha posterior puede ser inexacta en algunos segundos (y en la práctica, dado que las personas no actualizan sus máquinas con frecuencia, usted puede encontrar que cualquier momento en el futuro está desactivado por algunos segundos).

Esto da una buena explicación de la teoría de diseño de bibliotecas de fecha/hora y por qué esto es así: http://www.boost.org/doc/libs/1_41_0/doc/html/date_time/details.html#date_time.tradeoffs

+7

+1 por mencionar el segundo problema. Es muy frustrante cuando esto se maneja mal, incluso por personas que deberían saberlo mejor (comité POSIX, te estoy mirando ...) –

+0

+1 No estaba al tanto de esto. ¡Gracias! – victmo

+1

Vale la pena mencionar que el estándar ECMA ignora explícitamente los segundos intercalares (es decir, incluso * los segundos transcurridos *): [En los valores de tiempo se ignoran los segundos intercalados. Se supone que hay exactamente 86,400,000 milisegundos por día] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.1). –

-8

.Net proporciona la clase TimeSpan hacer los cálculos por usted.

var time1 = new Date(YYYY, MM, DD, 0, 0, 0, 0) 
var time2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0) 

Dim ts As TimeSpan = time2.Subtract(time1) 

ts.TotalSeconds 
+0

¿Es esto JavaScript? – Dropout

+0

@Jeff, es posible que desee eliminar esta respuesta para que no pierda puntos. Pidieron código fuente de JavaScript, en lugar de código fuente de Visual Basic. – MacGyver

-3

En bash:

bc <<< "$(date --date='1 week ago' +%s) - \ 
    $(date --date='Sun, 29 Feb 2004 16:21:42 -0800' +%s)" 

Se requiere tener aC y la fecha GNU instaladas.

+1

¿Cómo es esto relevante? – Dropout

1

Puede hacerlo de manera simple.

var secondBetweenTwoDate = Math.abs((new Date().getTime() - oldDate.getTime())/1000);