Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как заставить работать скрипт по серверному времени ? (https://javascript.ru/forum/misc/77081-kak-zastavit-rabotat-skript-po-servernomu-vremeni.html)

Nexus 26.03.2019 13:36

laimas,
Цитата:

Сообщение от laimas
а зачем?

Что именно?

laimas 26.03.2019 13:38

Цитата:

Сообщение от Nexus
Что именно?

Этак арифметика?

Nexus 26.03.2019 13:43

laimas, автору нужно получить серверное время в часовом поясе Москвы.
Самым простым способом было бы изменить временную зону сервера, но, видимо, автору это не подходит.
Поэтому так.

ddro3doff 26.03.2019 13:44

Цитата:

Сообщение от Nexus (Сообщение 505503)
Ну так консоль откройте и посмотрите в чем причина.
В пятой строке "unexpected token <", открываем исходники страницы, смотрим пятую строку и что видим?
php-код не исполнился, неправильно вставили.

Вставил сразу после <head>


Nexus 26.03.2019 13:45

ddro3doff, у вас php-код не исполнился.

Malleys 26.03.2019 13:50

Каждая ОС имеет механизм, который синхронизирует локальные часы с более надежным источником хронометража (таким как атомные часы NIST). Если это еще не сделано, настройте сервер для синхронизации его часов с одним из этих источников. В 99% у клиентов будет правильное время. Если вам нужна 100% точность, то продолжайте читать!

Цитата:

Сообщение от ddro3doff
В принципе все скрипты работают как нужно, токо по времени юзера, а мне нужно что бы таймер отсчитывал от серверного времени или от какого нибудь стороннего сервера.И вызывал всплывающие она тоже от серверного времени

Т. е. вам нужно, чтобы время клиента было точным!

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

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


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


Цитата:

Сообщение от laimas
Сервер и клиент возвращают смещение с противоположными знаками

Какой ужас! Я всё ни как не пойму, зачем вам вообще Лондон сдвигать в Москву...

Цитата:

Сообщение от Nexus
ddro3doff, получил московское время: https://jsfiddle.net/od4cx0fb/

Зачем вы меняете timestamp? У вас получилось по пятницам в 16 в Москве (GMT+3), или в 19, но в Бангладеше (GMT+6), (это одно и тоже время!) UPD[И от того, с какого часового пояса смотреть тоже отличается!]

И зачем вы пишете так, как будто у каждой временной зоны существует свой собственный timestamp?

ddro3doff, нужно получить timestamp, когда начинается мероприятие(назовём его eventDate), вычислив eventDate - date вы получите, сколько времени осталось до события. Вот график, а вот решение https://jsfiddle.net/5ts70kr2/ (Там время берётся со стороннего сервера, но вы можете брать со своего!)

ddro3doff 26.03.2019 14:00

Цитата:

Сообщение от Malleys (Сообщение 505513)
Каждая ОС имеет механизм, который синхронизирует локальные часы с более надежным источником хронометража (таким как атомные часы NIST). Если это еще не сделано, настройте сервер для синхронизации его часов с одним из этих источников. В 99% у клиентов будет правильное время. Если вам нужна 100% точность, то продолжайте читать!

Т. е. вам нужно, чтобы время клиента было точным!

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

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


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


Какой ужас! Я всё ни как не пойму, зачем вам вообще Лондон сдвигать в Москву...

Зачем вы меняте timestamp? У вас получилось по пятницам в 16 в Москве (GMT+3), или в 19, но в Бангладеше (GMT+6), (это одно и тоже время!)

И зачем вы пишете так, как будто у каждой временной зоны существует свой собственный timestamp?

ddro3doff, нужно получить timestamp, когда начинается мероприятие(назовём его eventDate), вычислив eventDate - date вы получите, сколько времени осталось до события. Вот график, а вот решение https://jsfiddle.net/5ts70kr2/ (Там время берётся со стороннего сервера, но вы можете брать со своего!)

Поменял часовой пояс на компьютере на +6 , время отчета в скрипте тоже уменьшилось на 3 часа. НЕ работает(

Malleys 26.03.2019 14:11

Цитата:

Сообщение от ddro3doff
часовой пояс на компьютере на +6

Вы живёте в где-то около Индии или в Бангладеше?

Посмотрите скрипт, который я написал... https://jsfiddle.net/5ts70kr2/ Он работает, даже если пользователь относится к тем 1% о котором я писал выше!

ddro3doff 26.03.2019 14:14

Цитата:

Сообщение от Malleys (Сообщение 505518)
Вы живёте в где-то около Индии или в Бангладеше?

Посмотрите скрипт, который я написал... https://jsfiddle.net/5ts70kr2/ Он работает, даже если пользователь относится к тем 1% о котором я писал выше!

Я наверно не верно описал что должен делать скрипт.
На сайте проходит игра "синхрон". Игра проходит каждую пятницу с 19 00 -19 50. Люди играют с разных стран и часовых поясов. Скрипт должен отсчитывать время до игры независимо от времени пользователя или его часового пояса. Ваш скрипт стоит на странице http://vsmislie.ru/.

Malleys 26.03.2019 14:17

Цитата:

Сообщение от ddro3doff
Игра проходит каждую пятницу с 19 00 -19 50.

По какому времени? Если по московскому, то скрипт именно делает то, что вы хотите!
Цитата:

Сообщение от ddro3doff
Скрипт должен отсчитывать время до игры независимо от времени пользоватея или его часового пояса.



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