Почему есть разница между меткой времени JavaScript и PHP - PullRequest
7 голосов
/ 07 апреля 2011

Я создал метки времени JavaScript, а также метку времени PHP.Разница между ними составляет около 170 с.

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

Может кто-нибудь подсказать, пожалуйстапочему у меня эта проблема?

Ответы [ 6 ]

14 голосов
/ 07 апреля 2011

PHP выполняется на стороне сервера, а в вашем примере JavaScript работает на стороне клиента.

Обе стороны имеют собственную конфигурацию времени. Для сервера настройки часового пояса и т. Д. Останутся прежними (если вы не измените их), но сервер не знает, в каком часовом поясе находится текущий посетитель. У вас нет возможности контролировать это.

Если я изменю системные часы на своем ноутбуке, это повлияет на дату / время JavaScript на стороне клиента, но таймер вашего сервера не будет затронут.

2 голосов
/ 07 апреля 2011

PHP и JavaScript, оба смотрят на системное время.Чья система?Тот, на котором они бегут.Сервер может находиться в другой стране с другим временем, отсюда и разница.

Кроме того, часы клиента (или реже сервера) могут быть неправильными.

Один способ, который я частоиспользовать для противодействия этой проблеме, как это:

var referenceTime = new Date('<?php echo date("M n, Y"); ?>');
// referenceTime is now the same as server time
1 голос
/ 07 апреля 2011

Матиас прав. Как правило, этого не должно случиться с такой большой разницей, потому что современные компьютеры распознают смещение своих часов с течением времени и используют протоколы, такие как NTP , для синхронизации своих часов.

Тем не менее, вы никогда не должны предполагать, что время на клиенте и сервере одинаково по двум причинам:

  • Некоторые клиенты / серверы не имеют настроек часов (например, NTP), и их часы расходятся со временем
  • Что еще более важно, многие пользователи / администраторы могут быть невежественными или запоздалыми в настройке своего часового пояса или в настройке перехода на летнее время, поэтому предоставленное вам время может быть с точностью до секунды, но с перерывом в несколько часов.

При сравнении / расчете времени я полагаюсь только на сервер. У вас нет контроля над клиентом.

1 голос
/ 07 апреля 2011

php использует время на вашем сервере, javascript будет использовать время на клиентском (пользовательском) компьютере.

1 голос
/ 07 апреля 2011

PHP просматривает системное время, то есть сервер, на котором оно работает.

JavaScript просматривает систему клиента, что может быть в любое время.

0 голосов
/ 07 апреля 2011

Если вас беспокоит согласованность для каких-либо целей, я рекомендую использовать сервер в качестве источника времени и при необходимости выполнять преобразование часового пояса:

Это может представлять интерес: обработка преобразования часового пояса с php

...