Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как вывести время в разных городах? (https://javascript.ru/forum/dom-window/72216-kak-vyvesti-vremya-v-raznykh-gorodakh.html)

LADYX 16.01.2018 11:01

Как вывести время в разных городах?
 
Добрый день! Есть скрипт часов и вкладок для разных городов. Сейчас часы показывают московское время во вкладке для этого города. Подскажите, пожалуйста, как правильно вывести время для других городов, и подключить при выборе города/вкладки Cookie? jQuery Cookie Plugin v1.4.1 (http://plugins.jquery.com/cookie/) к сайту подключен. Спасибо!
var moskowUtc = 3;
var timerId = setInterval(function() {
  let t = new Date(),
    tt = t.getUTCHours() + moskowUtc;
  document.getElementById('tik-tak-moscow').innerHTML = (tt > 24 ? "0" : "") + (tt > 24 ? tt - 24 : tt) + ":" + (t.getMinutes() < 10 ? '0' : '') + t.getMinutes() + ":" + (t.getSeconds() < 10 ? '0' : '') + t.getSeconds();
  document.getElementById('tik-tak-moscow').classList.add("step");
}, 1000);

$(function() {
  $("#tik-tak-tabs").on("click", ".tik-tak-tab", function() {
    var tabs = $("#tik-tak-tabs .tik-tak-tab"),
      cont = $("#tik-tak-tabs .tik-tak-wrp-tab");
    tabs.removeClass("active");
    cont.removeClass("active");
    $(this).addClass("active");
    cont.eq($(this).index()).addClass("active");
    return false;
  });
});

<style>#tik-tak-tabs .tik-tak-select>span {
  display: inline-block;
  margin: 0 10px 30px 0;
  cursor: pointer;
}

#tik-tak-tabs .tik-tak-wrp .tik-tak-wrp-tab>i {
  display: block;
  margin-top: 2px;
}

#tik-tak-tabs .tik-tak-wrp .tik-tak-wrp-tab {
  display: none;
}

#tik-tak-tabs .tik-tak-wrp .tik-tak-wrp-tab.active {
  display: block;
}
</style>
<div id="tik-tak-tabs">
  <div class="tik-tak-select">
    <span class="tik-tak-tab tik-tak-moscow">Москва</span>
    <span class="tik-tak-tab tik-tak-london">Лондон</span>
    <span class="tik-tak-tab tik-tak-new_york">Нью Йорк</span>
    <span class="tik-tak-tab tik-tak-tokyo">Токио</span>
  </div>
  <div class="tik-tak-wrp">
    <div class="tik-tak-wrp-tab active"><span id="tik-tak-moscow"></span><i>Москва</i></div>
    <div class="tik-tak-wrp-tab"><span id="tik-tak-london"></span><i>Лондон</i></div>
    <div class="tik-tak-wrp-tab"><span id="tik-tak-new_york"></span><i>Нью Йорк</i></div>
    <div class="tik-tak-wrp-tab"><span id="tik-tak-tokyo"></span><i>Токио</i></div>
  </div>
</div>

Dilettante_Pro 16.01.2018 12:18

LADYX,
http://geohelper.info/ru

LADYX 16.01.2018 12:42

Dilettante_Pro,
Цитата:

Сообщение от Dilettante_Pro

нет, мне не нужен этот сервис

рони 16.01.2018 13:34

время в разных городах c сохранением выбора
 
LADYX,

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
  var obj = {timeZone:"Europe/Moscow"}, timer, tz = window.localStorage.getItem("tz") || 0;
  function tic() {
    var date = new Date;
    $(".tik-tak-wrp-tab.active span").text(date.toLocaleTimeString("ru", obj));
    timer = window.setTimeout(tic, 1000);
  }
  tic();
  var tabs = $("#tik-tak-tabs .tik-tak-tab"), cont = $("#tik-tak-tabs .tik-tak-wrp-tab");
  $("#tik-tak-tabs").on("click", ".tik-tak-tab", function() {
    tabs.removeClass("active");
    cont.removeClass("active");
    var indx = $(this).index();
    window.localStorage.setItem("tz",indx);
    cont.eq(indx).addClass("active");
    obj.timeZone = $(this).addClass("active").data("timezone");
    window.clearTimeout(timer);
    tic();
    return false;
  });
  tabs.eq(tz).trigger("click");
});
  </script>
</head>

<body>
<style>#tik-tak-tabs .tik-tak-select>span {
  display: inline-block;
  margin: 0 10px 30px 0;
  cursor: pointer;
}

#tik-tak-tabs .tik-tak-wrp .tik-tak-wrp-tab>i {
  display: block;
  margin-top: 2px;
}

#tik-tak-tabs .tik-tak-wrp .tik-tak-wrp-tab {
  display: none;
}

#tik-tak-tabs .tik-tak-wrp .tik-tak-wrp-tab.active {
  display: block;
}
</style>
<div id="tik-tak-tabs">
  <div class="tik-tak-select">
    <span class="tik-tak-tab tik-tak-moscow" data-timeZone="Europe/Moscow">Москва</span>
    <span class="tik-tak-tab tik-tak-london" data-timeZone="Europe/London">Лондон</span>
    <span class="tik-tak-tab tik-tak-new_york" data-timeZone="America/New_York">Нью Йорк</span>
    <span class="tik-tak-tab tik-tak-tokyo" data-timeZone="Asia/Tokyo">Токио</span>
  </div>
  <div class="tik-tak-wrp">
    <div class="tik-tak-wrp-tab active"><span id="tik-tak-moscow"></span><i>Москва</i></div>
    <div class="tik-tak-wrp-tab"><span id="tik-tak-london"></span><i>Лондон</i></div>
    <div class="tik-tak-wrp-tab"><span id="tik-tak-new_york"></span><i>Нью Йорк</i></div>
    <div class="tik-tak-wrp-tab"><span id="tik-tak-tokyo"></span><i>Токио</i></div>
  </div>
</div>

</body>
</html>

LADYX 16.01.2018 14:43

рони,
да, супер! Огромное вам спасибо!!!

LADYX 16.01.2018 16:55

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

рони 16.01.2018 16:57

Цитата:

Сообщение от LADYX
берет локальное время, а не серверное

а где в вашем коде серверное?

LADYX 16.01.2018 17:15

Цитата:

Сообщение от рони
а где в вашем коде серверное?

А разве нет? Тогда я нифига не понимаю, здесь я вам даже ответить ничего не могу. Помогите, пожалуйста, мне разобраться. Вот смотрите, мне нужно показывать моск.время. Не локальное, т.е. независимо от того, в каком часовом поясе находится пользователь, ему нужно показывать моск.время, ну и плюс с вкладками других городов, которые сделали.

Aetae 16.01.2018 19:16

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

LADYX 16.01.2018 20:24

Aetae,
Ах вон оно что, теперь понятно. И по скрипту: я правильно понимаю, что этот скрипт любому пользователю, независимо от того, в каком часовом поясе он находится, будет показывать по умолчанию именно моск.время?

А серверное время можно вывести только с помощью php, верно?

Aetae 16.01.2018 22:59

LADYX, всё верно.

Из php само собой можно передать время в js, путём нехитрых математических манипуляций найти дельту и дальше использовать почти тот же самый скрипт, только с поправкой на эту дельту.
Ну и если совсем параноить, предполагая у юзера севшую батарейку биоса и отсутствие обновления по ntp, можно дополнительно периодически синхронизировать с сервером.)

laimas 17.01.2018 00:37

Цитата:

Сообщение от LADYX
А серверное время можно вывести только с помощью php, верно?

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

Aetae 17.01.2018 01:30

Цитата:

Сообщение от laimas (Сообщение 475406)
Отдавать время сервера нет необходимости

Моя телепатия, увы, не так сильна, так что поверю тебе на слово.

laimas 17.01.2018 01:35

Цитата:

Сообщение от Aetae
Моя телепатия, увы, не так сильна

Да я тоже не экстрасенс )

LADYX 17.01.2018 10:02

Всем огромное спасибо. Теперь я немного понял для себя, что и как, картинка для меня стала ясна. Спасибо, удачи вам!

LADYX 17.01.2018 13:08

Прошу прощения за вновь поднятую тему, такой вопрос: скажите, пожалуйста, когда секунды тикают, и вместе сними тикает и курсор мыши, и например, если навести курсор на ссылку, то при первом же тиканье секунды, курсор сбивается. Это нельзя никаким способом устранить?

рони 17.01.2018 13:26

LADYX,
в коде нет никаких ссылок, а время перезаписывается, и на его копирование есть только 1 секунда.

Aetae 17.01.2018 14:22

"Устранить" можно, но сложно - либо запоминать выделение перед обновлением и восстанавливать после, либо(не пробовал) работать с текст-нодами их методами.

LADYX 17.01.2018 14:26

Цитата:

Сообщение от рони
LADYX,
в коде нет никаких ссылок

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

Aetae 17.01.2018 14:33

Сбивается с чего на что?
В любом случае установите нужный cursor в css родителю и всё.

LADYX 17.01.2018 15:52

Aetae,
вот смотрите, запустите, пожалуйста, скрипт. И наведите на любую ссылку на сайте, ну например на "Цитата выделенного", и ненадолго оставьте курсор на месте. И можно будет увидеть этот эффект.
И также не запускайте скрипт, и также наведите на ту же ссылку и подержите курсор на месте. Курсор не будет сбиваться.

Aetae 17.01.2018 16:12

Ничего нигде не сбивается. Какие-то глюки браузера, видимо.
Какой браузер то?

LADYX 17.01.2018 16:46

Aetae,
опера 50.0

Aetae 18.01.2018 00:33

В хроме ничего не вижу, ставить оперу на домашний не буду.)
Снимите видео чтоль(напр CamStudio), посмотрим на эти чудеса. Или дождитесь того, кто сможет воспроизвести.

laimas 18.01.2018 06:41

Aetae,
курсор меняет стиль.

рони 18.01.2018 08:48

laimas,
а так?
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
  var obj = {timeZone:"Europe/Moscow"}, timer, tz = window.localStorage.getItem("tz") || 0;
  function tic() {
    var date = new Date;
    $(".tik-tak-wrp-tab.active span").contents()[0].data = date.toLocaleTimeString("ru", obj);
    timer = window.setTimeout(tic, 1000);
  }
  tic();
  var tabs = $("#tik-tak-tabs .tik-tak-tab"), cont = $("#tik-tak-tabs .tik-tak-wrp-tab");
  $("#tik-tak-tabs").on("click", ".tik-tak-tab", function() {
    tabs.removeClass("active");
    cont.removeClass("active");
    var indx = $(this).index();
    window.localStorage.setItem("tz",indx);
    cont.eq(indx).addClass("active");
    obj.timeZone = $(this).addClass("active").data("timezone");
    window.clearTimeout(timer);
    tic();
    return false;
  });
  tabs.eq(tz).trigger("click");
});
  </script>
</head>

<body>
<style>#tik-tak-tabs .tik-tak-select>span {
  display: inline-block;
  margin: 0 10px 30px 0;
  cursor: pointer;
}

#tik-tak-tabs .tik-tak-wrp .tik-tak-wrp-tab>i {
  display: block;
  margin-top: 2px;
}

#tik-tak-tabs .tik-tak-wrp .tik-tak-wrp-tab {
  display: none;
}

#tik-tak-tabs .tik-tak-wrp .tik-tak-wrp-tab.active {
  display: block;
}
</style>
<div id="tik-tak-tabs">
  <div class="tik-tak-select">
    <span class="tik-tak-tab tik-tak-moscow" data-timeZone="Europe/Moscow">Москва</span>
    <span class="tik-tak-tab tik-tak-london" data-timeZone="Europe/London">Лондон</span>
    <span class="tik-tak-tab tik-tak-new_york" data-timeZone="America/New_York">Нью Йорк</span>
    <span class="tik-tak-tab tik-tak-tokyo" data-timeZone="Asia/Tokyo">Токио</span>
  </div>
  <div class="tik-tak-wrp">
    <div class="tik-tak-wrp-tab active"><span id="tik-tak-moscow"> </span><i>Москва</i></div>
    <div class="tik-tak-wrp-tab"><span id="tik-tak-london"> </span><i>Лондон</i></div>
    <div class="tik-tak-wrp-tab"><span id="tik-tak-new_york"> </span><i>Нью Йорк</i></div>
    <div class="tik-tak-wrp-tab"><span id="tik-tak-tokyo"> </span><i>Токио</i></div>
  </div>
</div>

</body>
</html>

laimas 18.01.2018 08:50

Норма

LADYX 18.01.2018 10:15

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

рони 18.01.2018 10:25

Цитата:

Сообщение от LADYX
А у меня нет, не поменялось, курсор сбивается

вы копировали полностью? или тут проверяли?

laimas 18.01.2018 10:30

рони,
и правда, проверял сразу как увидел код - без проблем, теперь же курсор опять меняет стиль с pointer на default.

LADYX 18.01.2018 10:52

Цитата:

Сообщение от рони
вы копировали полностью? или тут проверяли?

и полностью заменил на сайте, не поменялось. И здесь также без изменений.

Aetae 18.01.2018 13:26

С какого хрена вообще фрейм влияет на отображение в родителе. Если у вас это происходит, наверное стоит таки открыть баг?

LADYX 18.01.2018 15:05

Aetae,
в смысле? ничего не понял

Nexus 18.01.2018 15:08

LADYX, Aetae, вероятно, о bug tracker'е браузера говорит.


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