Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 07.11.2016, 03:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Deff
Время сервера абсолютное! GMT+0
Даже так?! Оригинально. )
Ответить с цитированием
  #12 (permalink)  
Старый 07.11.2016, 03:44
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

laimas,

Ну как обычно, кады время на клиенте(в js => +new Date()) переводишь в миллисекунды - автопривязка к лондонскому (Ни наю как на PHP) но думаю нетрудно и там так жа сделать и выдать
Тогда Разность( при переводе в тики на клиенте) и сервером строго фиксированная, независима от размещения сервера и клиента
Посколь вычисляется на одном и том жа меридиане
//laimas, поверь, я с этими привязками и с таким вариантом работаю шесть лет

Последний раз редактировалось Deff, 07.11.2016 в 17:37.
Ответить с цитированием
  #13 (permalink)  
Старый 07.11.2016, 08:08
Интересующийся
Отправить личное сообщение для Vadya Посмотреть профиль Найти все сообщения от Vadya
 
Регистрация: 15.04.2010
Сообщений: 24

Всем спасибо, что откликнулись. Утро как всегда оказалось мудренее вечера. Вроде получилось.

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

var difference = new Date() - <?php echo time(); ?> * 1000;
var enddate =  difference + <?php echo strtotime('2020-01-01 20:50:50')*1000; ?>;

function get_timer_223(string_223) {var date_new_223 = string_223; var date_t_223 = new Date(date_new_223);
var date_223 = new Date();
var timer_223 = date_t_223 - date_223;
if(date_t_223 > date_223) {var day_223 = parseInt(timer_223/(60*60*1000*24));if(day_223 < 10) {day_223 = "" + day_223;}day_223 = day_223.toString();var hour_223 = parseInt(timer_223/(60*60*1000))%24;if(hour_223 < 10) {hour_223 = "0" + hour_223;}hour_223 = hour_223.toString();var min_223 = parseInt(timer_223/(1000*60))%60;if(min_223 < 10) {min_223 = "0" + min_223;}min_223 = min_223.toString();var sec_223 = parseInt(timer_223/1000)%60;if(sec_223 < 10) {sec_223 = "0" + sec_223;}sec_223 = sec_223.toString(); timethis_223 = day_223 + " : " + hour_223 + " : " + min_223 + " : " + sec_223;$(".timerhello_223 div.result3 .result-day3").text(day_223);$(".timerhello_223 div.result3 .result-hour3").text(hour_223);$(".timerhello_223 div.result3 .result-minute3").text(min_223);$(".timerhello_223 div.result3 .result-second3").text(sec_223);}else {$(".timerhello_223 div.result3 .result-day3").text("00");$(".timerhello_223 div.result3 .result-hour3").text("00");$(".timerhello_223 div.result3 .result-minute3").text("00");$(".timerhello_223 div.result3 .result-second3").text("00");} }function getfrominputs_223(){
string_223 = new Date(enddate);
get_timer_223(string_223);setInterval(function(){get_timer_223(string_223);},1000);}$(document).ready(function(){ getfrominputs_223();});


<span class="result-day3"></span> дней <span class="result-hour3"></span>:<span class="result-minute3"></span>:<span class="result-second3"></span>

При тестировании на локалке не забывайте, что время меняется не только в браузере )
Ответить с цитированием
  #14 (permalink)  
Старый 07.11.2016, 13:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Deff
Ну как обычно, кады время на клиенте(в js => +new Date()) переводишь в миллисекунды - автопривязка к лондонскому (Ни наю как на PHP) но думаю нетрудно и там так жа сделать и выдать


Причем тут миллисекунды, они вообще могут не учитываться, влияют только на точность, и если нужна таковая, используем. Добавление же миллисекунд к метке времени (timestamp) никоим образом не превращает ее в UTC да еще равное Гринвичу.

Сервер физически может располагаться где угодно, а вот время по которому он будет работать определяется разработчиком, ему необходимым временем. И это никак не зависит от того на чем работает сервер - время нужно всем, РНР ни РНР, не важно, это же время устанавливается и для sql-сервера. Установка времени (параметр) не зависит от языка, это единое для всех, и определяется как например Europe/London, Europe/Moscow, хоть для РНР, хоть для JS. И это время есть время локальное, то есть если одновременно получить метки на сервере и клиенте, то они будут различны и отличаться как раз на разницу часовых поясов. При этом метка времени есть значение абсолютное, а разница часовых поясов есть значение со знаком.
Ответить с цитированием
  #15 (permalink)  
Старый 07.11.2016, 14:26
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

С современными скоростями погрешность минимальна. Чтоб уж совсем её сократить - получать текущее время сервера ajax-ом и запоминать время на клиенте когда readyState == 2, расхождение буде измеряться миллисекундами.)
__________________
29375, 35
Ответить с цитированием
  #16 (permalink)  
Старый 07.11.2016, 17:19
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от laimas Посмотреть сообщение
Причем тут миллисекунды, они вообще могут не учитываться, влияют только на точность, и если нужна таковая, используем. Добавление же миллисекунд к метке времени (timestamp) никоим образом не превращает ее в UTC да еще равное Гринвичу.
Ни наю о чем спор
В яваскрипт при переводе в ms => + new Date() - время в ms автопривязывается к гринвичу! Независимо от текущего часового пояса
Сервер выдаёт в хидере тож переменную выдачи страницы с привязкой ко времени по Гринвичу
Подсчитываемая разность меж временем клиента в ms и сервера и есть то расхождение по времени
2. миллисекунды слабо на что влияют(Выдаём переменую в секундах) ибо отображение на клиенте 23:59:59 10/06/2016 или 00:00:00 10/07/2017 имхо не критично, в случае попадания на границу суток

Последний раз редактировалось Deff, 07.11.2016 в 17:21.
Ответить с цитированием
  #17 (permalink)  
Старый 07.11.2016, 17:22
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Да тут вообще что-то всё перемешалось.)
Время в любом случае должно браться абсолютное, что в js что в php - это очевидно.)
Я же говорил о способе синхронизации: пока скрипт на сервере отработает, пока до клиента дойдёт - уже кой-какой рассинхрон.)
__________________
29375, 35
Ответить с цитированием
  #18 (permalink)  
Старый 07.11.2016, 17:27
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Aetae,
Да челу нужна дата до секунд я так понял, смысла учитывать эти мелкие погрешности нет
Основная погрешность типично расхождение времени таймера на клиенте и на серве
Это бывает достаточно часто при редком запуске компьютера или редком подключением к сети для автосинхронизации таймера службами операционки, или переезд в другой часовой пояс, не меняя настроек часового пояса в Операционке
Достаточно считать дельту на входе каждой страницы, не заморачиваясь на какие-то API специальной синхронизации

Последний раз редактировалось Deff, 07.11.2016 в 17:40.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер обратного отсчета времени. Зацикленный stanislav_lisitsin Элементы интерфейса 0 17.03.2015 00:23
Обновляемый таймер на javascript smillyhamster Общие вопросы Javascript 1 31.12.2013 10:30
Таймер обратного отчёта с выполнение по времени xakerd Элементы интерфейса 1 20.03.2013 00:10
Таймер отсчета времени с кнопками denisich84 Работа 10 16.02.2012 16:25
LiveTimer - Живой таймер обновлялка времени "Обновлено: около минуты назад". fiw Общие вопросы Javascript 8 25.10.2011 01:56