Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Часы на сайт php+js (https://javascript.ru/forum/server/78190-chasy-na-sajjt-php-js.html)

ydav-07 07.08.2019 16:02

Часы на сайт php+js
 
Здравствуйте. Я совсем не силён в фронтенде и прошу помощи. Задача: сделать часы на странице html, которые показывают единое время для всех пользователей. Что сделал: часы на js и php, которые отправляют запрос на сервер каждую секунду и обновляют информацию на странице. Очень хочу сделать так, чтобы запрос был один, а дальше работал скрипт без обращения к серверу, но не могу разобраться из-за не хватки знаний. Спасибо за помощь.

файл php:
<?php echo date("G").":".date("i").":".date("s"); ?>

файл html:
<html>
<head>
<meta charset="utf-8">
<title>Часы</title>
<script>
window.onload = server_time;

function server_time(){
var req = new XMLHttpRequest();
req.open("GET","data_script.php",true);
req.onreadystatechange = function(){
document.getElementById("time_on_site").innerHTML = req.responseText;
}
req.send();
setTimeout("server_time()", 1000);
}
</script>
</head>
<body>
<div id="time_on_site"></div>
</body>
</html>

рони 07.08.2019 16:13

ydav-07,
https://javascript.ru/forum/misc/594...tml#post395951

ydav-07 07.08.2019 16:16

del

ydav-07 07.08.2019 16:16

del

ydav-07 07.08.2019 16:27

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

рони 07.08.2019 16:29

Цитата:

Сообщение от ydav-07
нужно будет вручную новое время задавать

не понимаю

ydav-07 07.08.2019 16:36

var span = document.querySelector('.time') ;
fn(span, '16:28:41');// fn(span, '%uptime%');
я понял это как: начать время с указанного в этой строчке. если закрыть страницу, что опять стартует с этого времени. возможно я ошибаюсь и это работает не так?

рони 07.08.2019 17:07

Цитата:

Сообщение от ydav-07
fn(span, '%uptime%');

что не так?

ydav-07 09.08.2019 15:10

рони,извините, но я туплю уже несколько дней, пытаясь зпихнуть из php время в переменную uptime... может быть дадите совет, что делать или читать.. спасибо

рони 09.08.2019 15:39

ydav-07,
laimas вероятно может подсказать. я могу только гадать.
fn(span, '<?php echo date("G").":".date("i").":".date("s"); ?>');

ydav-07 09.08.2019 15:48

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

laimas 09.08.2019 17:12

Цитата:

Сообщение от ydav-07
если вставлять php код в страницу(скрипт) не работает

Файл, в котором нужно выполнить РНР код должен быть исполняемым файлом, к примеру если вы пытаетесь вставить его в html и это расширение не добавлено как исполняемое, то никакой код и не будет выполнен.

Запрос клиентом сервера не означает, что он получит ответ мгновенно, всегда есть задержка, и она может быть и в несколько секунд. Если вы хотите иметь время сервера на клиенте, то не временную метку нужно отдавать клиенту, а смещение часового пояса сервера. У сервера и клиента относительно Гринвича эти смещения с разными знаками. Если сложить смещение часового пояса сервера со смещением часового пояса клиента, то получим положительную или отрицательную разницу. Эту разницу нужно прибавлять к полученной временной метке на клиенте, в результате чего и получится текущая временная метка сервера.

ydav-07 12.08.2019 08:32

laimas,
спасибо за подробный ответ. цель - точность в пределах минуты, двух. по работает локально(но в разных подсетях\сетях - источник времени к сожалению у всех отличается) и часовые пояса не меняются. суть проблемы том, что если системное время пользователя уходит от времени сервера 5+/- и более минут, то по начинает беситься. это пока временная мера, пока не исправится баг в по.

рони 12.08.2019 09:33

ydav-07,
https://javascript.ru/forum/misc/306...tml#post410922

ydav-07 12.08.2019 10:18

спасибо, я решил проблему с вашей помощью. первый пост от вас мне очень помог, немного докрутив я решил проблему.

laimas 12.08.2019 10:30

Цитата:

Сообщение от ydav-07
если системное время пользователя уходит от времени сервера 5+/- и более минут

Это что за компания такая, которая не способна настроить синхронизацию системного времени?

ydav-07 12.08.2019 10:51

это история умалчивает...


Часовой пояс GMT +3, время: 15:46.