Javascript.RU

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

destus,

Не пойдет так. Время MSK должно быть либо объектом, либо data-атрибутами, которое и смещается по выбранному часовому поясу, а не оперировать цифрами в тексте. И лучше не <p>11:40 программа 1</p>, а <p><span>11:40</span> программа 1</p>/
Ответить с цитированием
  #22 (permalink)  
Старый 02.07.2016, 17:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121


<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">


</head>

<body>
<select name="" id="set_time">
  <option value="0">выбрать</option>
  <option value="-2">-2 часа</option>
  <option value="-1">-1 часа</option>
  <option value="0">0 часов</option>
  <option value="1">+1 час</option>
  <option value="2">+2 часа</option>
</select>
 <div class="live"></div>
<script>
var obj = {
        data: [{
            time: {
                h: 1,
                m: 40
            },
            text: "программа 0"
        }, {
            time: {
                h: 11,
                m: 40
            },
            text: "программа 1"
        }, {
            time: {
                h: 12,
                m: 40
            },
            text: "программа 2"
        }, {
            time: {
                h: 23,
                m: 40
            },
            text: "программа 3"
        }],
        curent: 0
    },
    div = document.querySelector(".live");
    obj.data.forEach(function(c, a) {
    var b = document.createElement("p");
    div.appendChild(b);
    Object.defineProperty(obj, a, {
        set: function(a) {
            var h = (a.time.h + this.curent) % 24;
            h < 0 && (h += 24);
            b.innerHTML = h + ":" + a.time.m + " " + a.text
        }
    });
    obj[a] = c
});
Object.defineProperty(obj, "show", {
    set: function(c) {
        this.curent = +c || 0;
        this.data.forEach(function(a, b) {
            obj[b] = a
        })
    }
});
document.querySelector("#set_time").addEventListener("change", function() {
    obj.show = this.value
});
  </script>
</body>
</html>

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

рони,
только еще изменить (автор этого не понимает) сам выбор - не +1, +2..., а на именование часовых поясов, с просчетом разницы между GMT +3 MSK и выбранным часовым поясом.
Ответить с цитированием
  #24 (permalink)  
Старый 02.07.2016, 23:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

laimas,
я тоже не понял что нужно изменить. зачем высчитывать разницу если разница это значение option?
Ответить с цитированием
  #25 (permalink)  
Старый 02.07.2016, 23:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Пользователь живет то не по высчитанной разнице, а по часовому поясу в который его определила судьба.
Ответить с цитированием
  #26 (permalink)  
Старый 02.07.2016, 23:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

laimas,
так? пост 22 строки 13 - 17
Ответить с цитированием
  #27 (permalink)  
Старый 02.07.2016, 23:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Да, но Москва то не есть Гринвич, у Москвы +3 GMT, а к примеру житель Камчатки живет не по GMT как разнице между Москвой и Петропавловск-Камчатский, а по +12 GMT.

Что серверный, что клиентский скрипт не должны оперировать "искусственной" коррекцией, а опираться на существующие часовые пояса, а они то не обязательно с разницей в час, есть разница и по 30 минут. К тому, а если еще добавить возможность автоматом корректировать время, то есть получить часовой пояс клиента и ничего выбирать не надо, но тогда то полный швах будет. )
Ответить с цитированием
  #28 (permalink)  
Старый 02.07.2016, 23:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

laimas,
я пас, вернул всё как было, ты прав но в данном случае это не имеет никакого значения, люди скорее всего помнят часовую разницу с москвой, чем какой-то гринвич ( GMT ) и повезло не надо вычислять 30 минут.
Ответить с цитированием
  #29 (permalink)  
Старый 03.07.2016, 00:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от рони
люди скорее всего помнят часовую разницу с москвой, чем какой-то гринвич
Ну если часовой пояс в системных часах также бы значился как "Москва плюс/минус ваша деревня" тогда бы и вопросов не было, но это то не так. ) Пользователь вообще ничего не должен "подозревать", все скрыто от него за html-элементами, он выбирает не разницу, а место жительства по которому определяется его часовой пояс, а скрипты сами разберутся, что нужно делать, но оперировать то они должны действующими значениями.

Вы же прекрасно знаете, что время, это особый тип данных, и неаккуратность с этими данными может привести к неожиданным результатам. А это то изначально и заложено было "миной" как в самом описании "конструкции" автора, так и в последовавших предложениях "решения проблемы". Ну это же очевидно.
Ответить с цитированием
  #30 (permalink)  
Старый 03.07.2016, 00:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от laimas
то есть получить часовой пояс клиента и ничего выбирать не надо, но тогда то полный швах будет.
программа московских передач согласно времени клиента

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">


</head>

<body>

 <div class="live"></div>
 <script>
var obj = {
        data: [{
            time: {
                h: 1,
                m: 40
            },
            text: "программа 0"
        }, {
            time: {
                h: 11,
                m: 40
            },
            text: "программа 1"
        }, {
            time: {
                h: 12,
                m: 40
            },
            text: "программа 2"
        }, {
            time: {
                h: 23,
                m: 40
            },
            text: "программа 3"
        }]
    },
    div = document.querySelector(".live");
    obj.data.forEach(function(a) {
    var b = document.createElement("p");
    div.appendChild(b);
    b.innerHTML = time(a.time.h, a.time.m) +  " " + a.text

});

function time(h,m) {
  var d = new Date();
  d.setHours( h + 3, m + d.getTimezoneOffset());
  return d.toTimeString().substring(0,5);
}






  </script>
</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Новый input при выборе определенного option SLameN Элементы интерфейса 4 03.07.2015 16:29
Изменение selecta при выборе option ainur777 Общие вопросы Javascript 1 10.01.2015 16:23
Position fixed, но динамический по оси ОХ tvixa Элементы интерфейса 4 09.09.2013 15:39
Как заставить меняться стиль option одного селекта в зависимости от выбора option.. print_r Общие вопросы Javascript 1 08.01.2013 23:11
время время время .... dozer Оффтопик 21 21.08.2012 15:18