option и время
О великие гуру js, помогите пожалуйста с решением вопроса...
И так, есть раскрывающийся список Доустим <select> <option>-2</option> <option>-1</option> <option>0</option> <option>+1</option> <option>+2</option> </select> Ниже идет вывод со временем, напрмиер <p>11:00 Блаблабла</p> <p>11:45 Блаблабла</p> <p>12:30 Блаблабла</p> <p>13:00 Блаблабла</p> Вот,как сделать что бы при выборе нужного option,менялось время? Может кто сталкивался с таким... Заранее спасибо за все ответы.Всем мир! |
Менялось как?
|
Цитата:
|
в нижнем блоке ,где
<p>11:00 Блаблабла</p> <p>11:45 Блаблабла</p> <p>12:30 Блаблабла</p> <p>13:00 Блаблабла</p> соответственно option, -2часа,-1час,0часов,+1час,+2часа |
соответственно option, -2часа,-1час,0часов,+1час,+2часа
|
Цитата:
|
Нет,вы очень крутая жабка, которая ездите на скоростном ховер-байке, но не об этом...
смотри<select> <option>-2 часа</option> <option>-1 час</option> <option>0</option> <option>+1 час</option> <option>+2 часа</option> </select> <div class="live"> <p>11:40 программа 1</p> <p>12:40 программа 2</p> <p>13:40 программа 3</p> <p>14:40 программа 4</p> </div> Допустим,выбираем первый option, и время стоновится <p>9:40 программа 1</p> <p>10:40 программа 2</p> <p>11:40 программа 3</p> <p>12:40 программа 4</p> Может так понятнее будет |
<head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> </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 id="the_program"> <p>11:40 программа 1</p> <p>12:40 программа 2</p> <p>13:40 программа 3</p> <p>14:40 программа 4</p> </div> <script> $(function() { var $set_time = $('#set_time'), $the_program = $('#the_program'), number, separator, hour, min_and_text; $set_time.change(function() { number = $(this).val(); $the_program.children().each(function(i, el) { separator = $(el).text().indexOf(':'), hour = $(el).text().slice('0', separator), min_and_text = $(el).text().slice(separator); $(el).text(+number + +hour + min_and_text); }); }); }); </script> </body> |
Step48_rus,
лучше если будет обьект с данными для div class="live" ,проще изменять обьект чем парсить html |
Step48_rus,
и как будет 23 : 00 + 2 часа? |
del
|
Не правильно будет работать, в сутках всего 24 часа.
|
и что же тогда делать?
|
Цитата:
|
Цитата:
<head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> </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 id="the_program"> <p>6:40 программа 1</p> <p>7:40 программа 2</p> <p>8:40 программа 3</p> <p>9:40 программа 4</p> <p>10:40 программа 5</p> <p>11:40 программа 6</p> <p>12:40 программа 7</p> <p>13:40 программа 8</p> <p>14:40 программа 9</p> <p>16:40 программа 10</p> <p>17:40 программа 11</p> <p>18:40 программа 12</p> <p>19:40 программа 13</p> <p>20:40 программа 14</p> <p>21:40 программа 15</p> <p>22:40 программа 16</p> <p>23:40 программа 17</p> <p>24:40 программа 18</p> </div> <script> $(function() { var $set_time = $('#set_time'), $the_program = $('#the_program'), number, separator, hour, size, min_and_text; $set_time.change(function() { number = $(this).val(); $the_program.children().each(function(i, el) { separator = $(el).text().indexOf(':'), hour = $(el).text().slice('0', separator), min_and_text = $(el).text().slice(separator); size = +number + +hour < 0 ? 24 + +number + +hour : +number + +hour >= 24 ? +number + +hour - 24 : +number + +hour; $(el).text(size + min_and_text); }); }); }); </script> </body> |
тут скорее всего все таки в php Делать придется,в общем смотри,на сайте есть сайдбар,где выводится программа передач, в ней указано время по МСК, надо что бы при выборе различных часовых поясов,менялось только время, ибо у них канал работает по мск...
|
Смотри,если выбираешь вначале -2 а потом -1, то в сумме получается -3, а не -1
|
Цитата:
|
Цитата:
|
Step48_rus,
Вот небольшой набросок <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.js"></script> <select> <option>Выбрать</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"> <p>11:40 программа 1</p> <p>12:40 программа 2</p> <p>13:40 программа 3</p> <p>23:40 программа 4</p> </div> <script> let orig = [...document.querySelectorAll(".live>p")].map(el => el.cloneNode(true)); document.querySelector("select").addEventListener("change", e => { for (let p of document.querySelectorAll(".live>p").entries()){ p[1].textContent = orig[p[0]].textContent.replace(/\d{1,2}\:\d{1,2}/, match => { return moment(match, "HH:mm").add(e.target.value, "hour").format("HH:mm"); }); }; }); </script> |
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> |
laimas,
ваш пост 29 не понял целиком. |
d.setHours( h + 3, m + d.getTimezoneOffset()); - во, но данные/список отдает сервер, а значит явно прописать "h + 3" нельзя, это сервер должен получить и вставить. Сервер всегда будет корректировать смещение времени с учетом "временных революций", которые в нашей стране дай бог может быть и закончились, но кто его знает... :) А сервер и отдает смещение к востоку как положительное, а клиент наоборот возвращает отрицательное. То есть "искусственно подгонять под ответ время" и не требуется, да и может быть причиной ошибок.
|
Цитата:
Цитата:
Хотя, мне то, ну хотят так, да за ради бога. :) |
Цитата:
|
:D
да я не о том, что должен решать сервер, это как раз забота клиента. Но сервер и клиент живут то по одному времени, сервер только задает данные, а все должно решаться автоматом. И вы это прекрасно знаете, как и в вас понял. |
laimas,
в коде который я написал есть ошибки? ответ да / нет если нет , то менять ничего не нужно. если есть ошибки напишите правильный вариант кода. так понятно? |
laimas,
Я правильно понял, что в разметке циферки со смещением времени корректирует сервер, а все остальное делает яваскриптик? <select> <option>-2</option> <option>-1</option> <option>0</option> <option>+1</option> <option>+2</option> </select> |
рони,
а я разве писал, что в коде вашем есть ошибка? Я писал о том, что время, оно и в Африке время, и оперировать нужно им. Rasy, серверу ничего не нужно корректировать, сервер должен отдать список часовых поясов, где не <option>0</option>, а <option value="3" selected>Москва</option>, если расписание по умолчанию отдается по московскому времени. Это же значение отдается и скрипту для корректировки времени для клиента. В нашей стране со временем вообще непонятно что происходило и нет гарантии, что все устаканилось. Да и Москву могут смотреть не только у нас в стране, а это не только в час разница, да и к примеру Китай граничащий с нами имеет свои часовые пояса, а в Китае Москву смотрят. И что лазить в скрипты и подгонять, или же отдать текущий список часовых поясов и JS все сам сделает? Представьте себе, что вы данный скрипт будете использовать для отображения расписания какого либо местного ТВ, которое могут смотреть и в соседних регионах, и расписание будет по местному времени. Что придется делать - также рассчитывать разность между деревней Клюевка и Заречное для списка или же все таки использовать установленные часовые пояса, которые известны всем уважающим себя языкам программирования? Я что так не понятно говорю или ...? :) |
Ребята,всем огромное спасибо за вашу помощь,взял вариант destus
Еще раз всем огромное спасибо!!!!!!! |
Часовой пояс GMT +3, время: 05:46. |