|
|
|
|
|
для: Slo_Nik
(12.06.2012 в 22:59)
| | Ну вот еще, для разбора. ) Как я говорил, в случае такой надобности поступил бы так:
<style>
body {
font: 10pt arial, sans-serif;
}
input {
display: inline-block;
margin-right: 2px;
border: 1px solid #777;
width: 60px;
height: 17px;
padding-left: 4pt;
float: left;
}
#bth {
display: inline-block;
border: 1px solid #777;
background: #aaa;
width: 19px;
height: 19px;
float: left;
}
.tm_box, .tm_box div .tm_box {
display: none;
position: relative;
padding: 2px 0 0 2px;
width: 111px;
height: 111px;
background: #fff;
border: 1px solid #777;
}
.gray {background: #eee;}
.tm_box div .tm_box {
height: 89px;
top: -17px;
}
.tm_box div {
display: block;
text-align: right;
padding: 1px;
line-height: 17px;
width: 17px;
height: 17px;
border: 1px solid #777;
margin: 0 1px 1px 0;
float: left;
cursor: pointer;
}
</style>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
var h, tms;
function showSelect(e) {
$("#minutes").remove();
var tm = '<div class="tm_box" id='+tms.id+'>';
for(var i = tms.start; i<tms.end; i += tms.step)
tm += '<div>'+(tms.prev && i<10 ? '0' : '')+i%tms.mod+'</div>';
tm += '</div>';
$(tm).appendTo($(e))
.slideDown(300)
.parent().off('click');
}
function startEvent() {
$("#bth").on('click', function(){
tms = {id:'hours',start:6,end:28,step:1,mod:25,prev:0};
$("#time").val("");
showSelect(this);
});
}
$(function(){
startEvent();
$("#hours div").live('click',
function(e) {
e.stopImmediatePropagation();
tms = {id:'minutes',start:0,end:60,step:3,mod:60,prev:1};
if($(this).parent().attr("id")=="hours") {
h = $(this).text();
$(this).parent().addClass("gray");
showSelect(this);
} else {
$("#time").val(h+":"+$(this).text());
$("#hours").remove();
startEvent();
}
}
);
});
</script>
<input id="time" />
<div id="bth"></div>
|
DIV "bth", это кнопка с иконкой календаря. | |
|
|
|
|
|
|
|
для: confirm
(12.06.2012 в 22:37)
| | а... Понял...
Спасибо за подсказки и код... Буду разбираться. | |
|
|
|
|
|
|
|
для: Slo_Nik
(12.06.2012 в 22:10)
| | Нет не это. Каждый часовой интервал поместить в группу, заголовком которого будет указываться начало часового интервала, например, 6 часов, 7 часов и т.д.. Так как такой заголовок отображается в списке жирным шрифтом, а элементы списка с отступом, то удобнее будет воспринимать такой длинный список, а значит и выбирать легче будет. | |
|
|
|
|
|
|
|
для: confirm
(12.06.2012 в 22:00)
| | вот только не понял с группами...
Вы имеете ввиду на первую половину дня и второю? | |
|
|
|
|
|
|
|
для: Slo_Nik
(12.06.2012 в 21:46)
| | Я понял что для тренировки ) Ну ради нее и разбейте на группы список. Я так думаю, будет более удобно в этом случае. | |
|
|
|
|
|
|
|
для: confirm
(12.06.2012 в 21:21)
| | я же говорю, что не себе, для практического применения спросил.
Просто для общего развития.
Ну а фигурные скобки по привычке ставлю | |
|
|
|
|
|
|
|
для: Slo_Nik
(12.06.2012 в 20:36)
| | К дате (текущей) все равно привязано, просто явно данным способом ее нет необходимости указывать.
Второй вариант как вариант, можно ведь и по второму сделать. Ну а если говорить о практическом применении, то я бы так не делал, очень уж неудобен такой список для восприятия. Если уж неймется, то хотя бы разделить список на группы по часам (optgroup), иначе либо крутить медленно всматриваясь во время, либо плюнуть на это занятие. )
Я бы применил календарное представление и использовал JS, может чуть позже опишу такой вариант.
PS. Фигурные скобки для одного оператора, это роскошь. :) | |
|
|
|
|
|
|
|
для: confirm
(12.06.2012 в 17:24)
| | ага, понятно, а я то пытался делить при вычислении в $i += 3...
вот только зачем второй вариант, если первый работает без привязки к дате?
написал так
<select name = 'listDataOne'>
<?php
for($i = mktime(6,0,0), $k = strtotime('6:00 + 20 hours'); $i < $k; $i += 180){
echo "<option>".date('H:i', $i)."</option>";
}
?>
</select>
|
выводит только время в нужном диапазоне. | |
|
|
|
|
|
|
|
для: Slo_Nik
(12.06.2012 в 16:35)
| | Да 360 - это 6 часов, 1560 - 6+20 часов. А дальше нет - дальше нужно делить на 60, округляя в меньшую сторону, получая часы, и по модулю 60, получая минуты:
<?
$s = '<select>';
for($i=360; $i<=1560; $i += 3)
$s .= '<option>'.(floor($i/60)%24).':'
.($i%60 < 10 ? '0'.$i%60 : $i%60).'</option>';
echo $s.'</select>';
|
| |
|
|
|
|
|
|
|
для: confirm
(12.06.2012 в 07:49)
| | спасибо за подсказку, очень краткий код получился у Вас... Теперь пытаюсь понять, как и что...
убрал из date день-месяц-год, время нормально выводит. Вот второй вариант не совсем понятен.
Я понял так
$i = 360 (6 часов после полуночи)
$k = 1560 (20 часов от 6 утра отсчитываем)
в цикле всё так же как в Вашем варианте? | |
|
|
|
|