destus,
Не пойдет так. Время MSK должно быть либо объектом, либо data-атрибутами, которое и смещается по выбранному часовому поясу, а не оперировать цифрами в тексте. И лучше не <p>11:40 программа 1</p>, а <p><span>11:40</span> программа 1</p>/ |
:write:
<!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> |
рони,
только еще изменить (автор этого не понимает) сам выбор - не +1, +2..., а на именование часовых поясов, с просчетом разницы между GMT +3 MSK и выбранным часовым поясом. |
laimas,
я тоже не понял что нужно изменить. зачем высчитывать разницу если разница это значение option? |
Пользователь живет то не по высчитанной разнице, а по часовому поясу в который его определила судьба. :)
|
laimas,
так? пост 22 строки 13 - 17 |
Да, но Москва то не есть Гринвич, у Москвы +3 GMT, а к примеру житель Камчатки живет не по GMT как разнице между Москвой и Петропавловск-Камчатский, а по +12 GMT. :)
Что серверный, что клиентский скрипт не должны оперировать "искусственной" коррекцией, а опираться на существующие часовые пояса, а они то не обязательно с разницей в час, есть разница и по 30 минут. К тому, а если еще добавить возможность автоматом корректировать время, то есть получить часовой пояс клиента и ничего выбирать не надо, но тогда то полный швах будет. ) |
laimas,
я пас, вернул всё как было, ты прав но в данном случае это не имеет никакого значения, люди скорее всего помнят часовую разницу с москвой, чем какой-то гринвич ( GMT ) и повезло не надо вычислять 30 минут. |
Цитата:
Вы же прекрасно знаете, что время, это особый тип данных, и неаккуратность с этими данными может привести к неожиданным результатам. А это то изначально и заложено было "миной" как в самом описании "конструкции" автора, так и в последовавших предложениях "решения проблемы". Ну это же очевидно. :) |
Цитата:
<!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> |
Часовой пояс GMT +3, время: 11:33. |