Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   получить время с сервера (https://javascript.ru/forum/css-html/31900-poluchit-vremya-s-servera.html)

Артист 08.01.2017 19:34

Что-то ругается на скобки:

alert(<?php echo time() * 1000 ?> +'\n' + new Date())

AngelW 10.01.2017 23:32

Спасибо за решение
 
а помошникам стыд и срам.... от их заумства они не выглядят умными

АндрейD 22.05.2020 14:57

Это на сервере
<?php
echo date('H:i:s d.m.Y');
?>

Код js, посылающий каждую секунду ajax запрос
let test = document.querySelector('#test');
document.addEventListener('DOMContentLoaded', () => {
window.setInterval(timer, 1000);
});
async function timer() {
let promise = await fetch('/ajax.php/');
let data = await promise.text();
test.innerHTML = data;
}

laimas 22.05.2020 15:10

Цитата:

Сообщение от АндрейD
Код js, посылающий каждую секунду ajax запрос

Зачем? Клиенту достаточно знать часовой пояс сервера все остальное это клиентское время с разницей часовых поясов.

Aetae 22.05.2020 15:27

laimas, а вдруг у клиента на компьютере часы идут неправильно? :lol:

P.S. На самом деле на компьютере часы таки могут идти неправильно, сам лично столкнулся с этим когда в ноутбуке сдохал батарейка CMOS - часы отставали за час на ~5-10 минут. Но это слишком уникальная ситуация чтоб о ней заботиться.)

laimas 22.05.2020 15:44

Цитата:

Сообщение от Aetae
а вдруг у клиента на компьютере часы идут неправильно?

Это проблемы не сервера, а клиента, и заметить их несложно, да и синхронизацию часов никто не отменял. :)

Malleys 22.05.2020 17:56

laimas, а если нужно точное время? Читай далее...

АндрейD, достаточно получить время один раз, все остальные времена вычисляются на его основе.

Вы можете получить с сервера времени(или со своего сервера) метку времени (UTC timestamp) и её передать в конструктор Date. Так вы получите точное время на тот момент. Пусть оно хранится в константе serverTime. Вам сразу же надо создать константу со временем на устройстве пользователя, например, пусть это будет clientTime.

Вычислив разницу между двумя этими временами, вы узнаете на сколько отличается время клиента от точного!
const dateDiff = serverDate.getTime() - clientDate.getTime();



Для того, чтобы получать впоследствии точное время, вам нужно прибавлять эту разницу ко времени клиента
const date = new Date(Date.now() + dateDiff);

laimas 22.05.2020 18:03

Цитата:

Сообщение от Malleys
а если нужно точное время? Читай далее...

И чем это отличается от времени клиента скорректированного на разницу часовых поясов?

Malleys 22.05.2020 18:16

Цитата:

Сообщение от laimas
И чем это отличается от времени клиента скорректированного на разницу часовых поясов?

У некоторых людей такое будет отличаться ещё в среднем на ±5 секунды.

laimas 22.05.2020 18:26

Цитата:

Сообщение от Malleys
У некоторых людей такое будет отличаться ещё в среднем на ±5 секунды.

Сам вопрос "а если нужно точное время?" настолько же абсурден как и довод в 5 секунд. Не может быть время сервера точнее времени клиента и наоборот, весь земной шарик живет по единому времени, которое различно на разницу часовых поясов. UTC как раз это и отражает.

Если у клиента разница в 5 секунд, то это нерадивый клиент, если у сервера ошибка в 5 секунд, то это нерадивый сервер, если у обоих ошибка, то нерадивы оба. Но причем тут время, часовые пояса и т.д.?

Использование UTC будет иметь только одно отличие от расчета на разность часовых поясов - в UTC нет перевода на зимнее/летнее время, а вот часовой пояс будет смещаться. Но если сервер отдает свой часовой пояс, то это будет скорректировано и у него.

Все остальное, это болтовня.


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