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)

ddro3doff 26.03.2019 09:06

Цитата:

Сообщение от laimas (Сообщение 505210)
ddro3doff, уясните простую вещь (и хорошо бы для закрепления самому "пощупать" скриптом, что сие означает) - сервер возвращает временную зону западнее UTC как отрицательное число, а восточнее положительные. А клиент эти значения возвращает с противоположным знаком.

Отдавая страницу клиенту отдайте временную зону сервера, и суммируйте с временной зоной клиента:

var tZ = <?=date('Z') * 1000?> + (new Date).getTimezoneOffset() * 60 * 1000;


Вот на это нужно корректировать создание даты везде в скрипте, и все будет работать по времени сервера, по какому бы часовому поясу он не работал.

Спасибо за ответ. А как сделать что бы время бралось по МСК а не по серверу?

laimas 26.03.2019 09:45

А ваш сервер что по времени Якутска работает? Вы можете временную зону на севере установить любую. Можете и вообще ничего не передавать клиенту, на нем корректируйте сразу на московское время.

ddro3doff 26.03.2019 10:48

Цитата:

Сообщение от laimas (Сообщение 505467)
А ваш сервер что по времени Якутска работает? Вы можете временную зону на севере установить любую. Можете и вообще ничего не передавать клиенту, на нем корректируйте сразу на московское время.

У меня сервер работает по Украинскому времени + перевод часов. А мне нужно отчет времени от мск. Не злитесь , я в JS практически ничего не понимаю. Можете помочь мне с кодом?
https://jsfiddle.net/jo9ch453/

Nexus 26.03.2019 10:58

ddro3doff, получил московское время: https://jsfiddle.net/od4cx0fb/

ddro3doff 26.03.2019 10:59

Цитата:

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

Огромное спасибо!

ddro3doff 26.03.2019 11:58

Цитата:

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

Не работает( Время считает от компьютерного времени.
Вот пример http://vsmislie.ru/sinhron/

Nexus 26.03.2019 12:16

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

Можно сделать так (не тестировал):
<head>
<script>//Этот скрипт нужно вставить как можно раньше в страницу
	var SERVER_MOSCOW_TIMESTAMP=<?php echo time()-date('Z'); ?>*1000+180*60*1000;
	setTimeout(function tic(){
		SERVER_MOSCOW_TIMESTAMP+=1000;
		setTimeout(tic,1e3);
	},1e3);
</script>
</head>
<body>
<script>
        //пример получения Московского серверного времени
	var moscowTime=new Date(SERVER_MOSCOW_TIMESTAMP);
</script>
</body>

ddro3doff 26.03.2019 13:17

Цитата:

Сообщение от Nexus (Сообщение 505496)
ddro3doff, если я правильно вас понял, то проблема в кривом времени толи сервера, толи клиента.

Можно сделать так (не тестировал):
<head>
<script>//Этот скрипт нужно вставить как можно раньше в страницу
	var SERVER_MOSCOW_TIMESTAMP=<?php echo time()-date('Z'); ?>*1000+180*60*1000;
	setTimeout(function tic(){
		SERVER_MOSCOW_TIMESTAMP+=1000;
		setTimeout(tic,1e3);
	},1e3);
</script>
</head>
<body>
<script>
        //пример получения Московского серверного времени
	var moscowTime=new Date(SERVER_MOSCOW_TIMESTAMP);
</script>
</body>

В моём коде заменил
var today = new Date();
на
var today =new Date(SERVER_MOSCOW_TIMESTAMP);
Между head первым скриптом прописал
<script>//Этот скрипт нужно вставить как можно раньше в страницу
	var SERVER_MOSCOW_TIMESTAMP=<?php echo time()-date('Z'); ?>*1000+180*60*1000;
	setTimeout(function tic(){
		SERVER_MOSCOW_TIMESTAMP+=1000;
		setTimeout(tic,1e3);
	},1e3);
</script>


Не работает. Время вообще не выводится.

Nexus 26.03.2019 13:26

Цитата:

Сообщение от ddro3doff
Не работает. Время вообще не выводится.

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

laimas 26.03.2019 13:32

Цитата:

Сообщение от ddro3doff
SERVER_MOSCOW_TIMESTAMP=<?php echo time()-date('Z'); ?>*1000+180*60*1000

Нифига себе, а зачем?

Можно указать на клиенте переменную - московскую часовую зону +3. Ибо опять, видимо, будет "революция" с переводом стрелок, что ранее отменили. А значит придется ручками "Москву переводить".

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


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