2011-04-07 7 views
8

He creado un timestamp de JavaScript y también un timestamp de PHP. Hay una diferencia de aproximadamente 170 segundos entre ellos.¿Por qué hay una diferencia entre JavaScript y PHP timestamp?

  • 1302162686 PHP - time()
  • 1302162517 JavaScript - Math.round(new Date().getTime()/1000)

Puede alguien decirme por qué estoy teniendo este problema?

+1

¿tienen el servidor y el cliente ha establecido el mismo tiempo? –

Respuesta

14

PHP se ejecuta en el lado del servidor, y en su ejemplo, JavaScript funciona en el lado del cliente.

Ambos lados tienen su propia configuración de tiempo. Para el servidor, la configuración de zona horaria, etc. permanecerá igual (a menos que los modifique), pero el servidor no tiene idea de en qué zona horaria se encuentra el visitante actual. No hay manera de que usted controle eso.

Si cambio mi reloj del sistema en mi computadora portátil, esto influirá en la fecha/hora de JavaScript del lado del cliente, pero el temporizador del servidor no se verá afectado.

+1

¡Tengo 8 horas de diferencia! – nerkn

+0

Lo siento mal, estaba totalmente fuera de mi mente esa vez. Gracias por tu ayuda. –

1

PHP mira la hora del sistema, que es el servidor que la está ejecutando.

JavaScript mira el sistema del cliente, que podría ser en cualquier momento.

1

php usa la hora en su servidor, javascript usará la hora en la máquina del cliente (usuarios).

1

Mathias es el correcto. En general, esto no debería ocurrir con esa gran diferencia porque las computadoras modernas reconocen que sus relojes se desplazan con el tiempo y emplean protocolos como NTP para mantener sus relojes sincronizados.

Sin embargo nunca se debe asumir el momento en el cliente y el servidor es el mismo, por dos razones:

  • Algunos clientes/servidores no tienen ajustes de reloj (como NTP) y sus relojes se alejan más de tiempo
  • Más importante aún, muchos usuarios/administradores pueden no tener idea o retrasarse en la configuración de su zona horaria o en el horario de verano, por lo que el tiempo otorgado puede ser preciso por un segundo pero estar varias horas apagado.

Al comparar/calcular los tiempos, me basaría solo en el servidor. Usted no tiene control sobre el cliente.

+0

Gran respuesta. Ese último párrafo no puede enfatizarse lo suficiente. –

2

PHP y JavaScript, ambos miran la hora del sistema. ¿De quién es el sistema? En el que se están ejecutando. El servidor podría estar ubicado en otro país con diferente tiempo, de ahí la diferencia.

Además, el reloj del cliente (o menos frecuentemente, del servidor) podría ser incorrecto.

Una forma, que a menudo utilizo para hacer frente a este problema es la siguiente:

var referenceTime = new Date('<?php echo date("M n, Y"); ?>'); 
// referenceTime is now the same as server time 
0

Si usted está preocupado acerca de la consistencia para cualquier propósito, le recomiendo usar el servidor como su fuente de tiempo y hacer las conversiones de zona horaria si es necesario:

Esto puede ser de interés: handling timezone conversion with php

Cuestiones relacionadas