|
|
|
| Время хранится в базе в виде - 10.10, 12.30, 14.40, 16.50, 19.00, 21.15, 23.25
Как сделать чтобы время, которое уже меньше текущего отмечалось, допустим, серым цветом, а которое больше - черным. Что-то вроде сеансов в афише.
Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(29.01.2008 в 10:43)
| | Навскидку:
<?php
list($h,$m) = explode('.',$time); //в $time время взятое из базы формат часы.минуты
$h=intval($h);
$m=intval($m);
if((int)date('G') >= $h and (int)date('i') > $m) echo'<font color="grey">'; else echo'<font color="black">';
echo $time.'</foot>блаблабла';
?>
|
//В этом случае если текущее время больше указанного то "серый цвет", иначе "черный". Должно работать:) . Правда идёт проверка лишь часов и минут. Следовательно с наступлением нового дня все начнется сначала. | |
|
|
|
|
|
|
|
для: not detected
(29.01.2008 в 11:12)
| | Вы взяли одно значение времени или все?
Так не работает. (( | |
|
|
|
|
|
|
|
для: kis-kis
(29.01.2008 в 11:51)
| | Да, одно. А вы как выводите эти данные? Не через цикл? | |
|
|
|
|
|
|
|
для: not detected
(29.01.2008 в 13:36)
| | нет, данные времени лежат в одном поле, тип varchar | |
|
|
|
|
|
|
|
для: kis-kis
(29.01.2008 в 14:37)
| | так тоже не работает:
$seans_list = array($seans['stime']);
foreach ($seans_list as $result)
{
$val=$result;
list($h,$m) = explode('.',$val); //в $time время взятое из базы формат часы.минуты
$h=intval($h);
$m=intval($m);
if((int)date('H') >= $h and (int)date('i') > $m)
$stime = "<span class=\"data\">".$val."</span>";
else $stime = "<span class=\"enddata\">".$val."</span>";
}
|
| |
|
|
|
|
|
|
|
для: kis-kis
(29.01.2008 в 16:32)
| | Напишите пожалуйста полностью код с помощью которого вы выводите данные. | |
|
|
|
|
|
|
|
для: not detected
(29.01.2008 в 17:00)
| |
$query_seans = "SELECT * FROM afisha_seance WHERE anons_id = '$anons[id]' and date_f >= '$today' and date_s <= '$today' order by date_f";
$result_seans=mysql_query($query_seans) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
if (mysql_num_rows($result_seans)!=0)
{
while($seans = mysql_fetch_array($result_seans))
{
$seans_list = $seans['stime'];
$seans_list=explode(', ',$seans_list);
foreach ($seans_list as $result)
{
$val=$result;
list($h,$m) = explode('.',$val); //в $time время взятое из базы формат часы.минуты
$h=intval($h);
$m=intval($m);
if((int)date('G') >= $h and (int)date('i') > $m)
echo $stime = " <span class=\"enddata\">".$val."</span>";
else echo $stime = " <span class=\"data\">".$val."</span>";
}
}
}
|
Дамп во вложении | |
|
|
|
|
|
|
|
для: kis-kis
(29.01.2008 в 17:14)
| | Попробуйте так
<?php
...
while($seans = mysql_fetch_array($result_seans))
{
$seans_list=explode(',', $seans['stime']);
foreach($seans_list as $val)
{
list($h,$m) = explode('.',$val);
$h=intval($h);
$m=intval($m);
if((int)date('G') > $h or ((int)date('G') == $h and (int)date('i') > $m))
|
...дальше так как у вас написано. | |
|
|
|
|
|
|
|
для: not detected
(29.01.2008 в 18:32)
| | Спасибо Вам большое. Этот код тоже работает:
$now_time = date("H:i");
$seans_list=explode(', ',$seans['stime']);
foreach ($seans_list as $result)
{
$val=$result;
if ($val > $now_time)
{
$stime = " <font color=\"black\">".$val."</font>";
}
else
{
$stime = " <font color=\"grey\">".$val."</span>";
}
echo "".$stime."<br>";
}
|
Какой из них оптимальнее использовать? И еще и в Вашем и в моем случае время после полуночи скрипт считает меньше текущего. Можно ли это исправить? | |
|
|
|
|
|
|
|
для: kis-kis
(29.01.2008 в 18:44)
| | Ґґ, ваш вариант намного лучше:) . Только думаю здесь date("H:i") вместо двоеточия лучше поставить точку date("H.i"); тогда получим дату как десятичную дробь и тогда уже можно сравнивать с нашими значениями, которые тоже рассматриваются как десятичная дробь.
Насчёт времени после полуночи: тут вроде каг надо ввести ещё одну переменную, в которой будет хранится время начала дня. Например считать новый день с 6.00 утра. | |
|
|
|
|
|
|
|
для: not detected
(29.01.2008 в 19:58)
| | >> Например считать новый день с 6.00 утра.
А как это реализовать? ))
И как теперь собрать все значения времени в единое целое? Мы же их разбивали ф-цией
$seans_list=explode(',', $seans['stime']);
Спасибо. ;-) | |
|
|
|
|
|
|
|
для: not detected
(29.01.2008 в 19:58)
| | Опять навскидку:
Где нибудь в начале задаем перемену
$end_day='6.00'; // с шести утра считать новый день
Ну и тогда условие с помощью которого определяем прошло время или нет изменить на что то типо этого
if(($now_time > $end_day and $now_time > $val and $val > $end_day) or ($now_time < $end_day and ($now_time > $val or $val > $end_day)))
...ну а дальше каг у вас:) . Копировать просто сейчас трудновато (сижу с тела, комп в ремонте).//Проверьте, работает условие или нет.
//А зачем собирать строку обратно? Выводите время прямо в цикле. explode'ом мы разбили строку '10.20, 12.30, и т.д.' на подстроки '10.20' '12.30' и Т.д. | |
|
|
|
|
|
|
|
для: not detected
(29.01.2008 в 20:05)
| | Условие работает.
Со строкой не понял. Собирать нужно обязательно, т.к. помимо времени выводится еще информация.
while($seans = mysql_fetch_array($result_seans))
{
// Текущее время
$now_time = date("H.i");
// Конец текущего дня
$end_day = "06.00";
$seans_list=explode(', ',$seans['stime']);
foreach ($seans_list as $val)
{
if(($now_time > $end_day and $now_time > $val and $val > $end_day) or ($now_time < $end_day and ($now_time > $val or $val > $end_day)))
$stime = " <span class=\"enddata\">".$val."</span>";
else $stime = " <span class=\"data\">".$val."</span>";
// echo "".$stime."<br>";
}
echo "".$seans['hall']."- ".$stime."<br>";
}
|
| |
|
|
|
|
|
|
|
для: kis-kis
(29.01.2008 в 20:30)
| | дубль | |
|
|
|
|
|
|
|
для: kis-kis
(29.01.2008 в 20:30)
| | дубль | |
|
|
|
|
|
|
|
для: kis-kis
(29.01.2008 в 20:30)
| |
<?php
$query_seans = "SELECT * FROM afisha_seance WHERE anons_id = '$anons[id]' and date_f >= '$today' and date_s <= '$today' order by date_f";
$result_seans = mysql_query($query_seans) or die('<B>Error '.mysql_errno().' :</B> '.mysql_error());
if(mysql_num_rows($result_seans) > 0){
$now_time=date('H.i');
$end_day='6.00';
$stime='';
while($seans = mysql_fetch_array($result_seans)){
$val = explode(',', $seans['stime']);
for($i=0; $i<sizeof($val); $i++){
if(trim($val =='')) continue;
if(($now_time > $end_day and $now_time > $val[$i] and $val[$i] > $end_day) or ($now_time < $end_day and ($now_time > $val[$i] or $val[$i] > $end_day)))
$stime .= ' <span class="enddata">'.$val[$i].'</span>';
else $stime .= ' <span class="data">'.$val[$i].'</span>';
}
echo $seans['hall'].'-'.$stime.'<br>';
}
}else echo'сеансов нет<br/>';
?>
|
Или так можно
<?php
$query_seans = "SELECT * FROM afisha_seance WHERE anons_id = '$anons[id]' and date_f >= '$today' and date_s <= '$today' order by date_f";
$result_seans = mysql_query($query_seans) or die('<B>Error '.mysql_errno().' :</B> '.mysql_error());
if(mysql_num_rows($result_seans) > 0){
$now_time=date('H.i');
$end_day='6.00';
while($seans = mysql_fetch_array($result_seans)){
$val = explode(',', $seans['stime']);
echo $seans['hall'].'-';
for($i=0; $i<sizeof($val); $i++){
if(trim($val =='')) continue;
if(($now_time > $end_day and $now_time > $val[$i] and $val[$i] > $end_day) or ($now_time < $end_day and ($now_time > $val[$i] or $val[$i] > $end_day)))
echo' <span class="enddata">' .$val[$i].'</span>';
else echo' <span class="data">'.$val[$i].'</span>';
}
echo'<br>';
}
}else echo'сеансов нет<br/>';
?>
|
//Прошу прощения за дубли постов. Нажимал вроде "править сообщение", а оно запостилось как новое. | |
|
|
|
|
|
|
|
для: not detected
(30.01.2008 в 06:05)
| | Опечатолся немного:
вместо
if(trim($val =='')) continue;
надо
if(trim($val) =='') continue; | |
|
|
|
|
|
|
|
для: not detected
(30.01.2008 в 06:41)
| | Так работает, но не совсем правильно.
$stime постоянно увеличивается на предыдущий сеанс, т.е.
1 сеанс был - 16.55 19.05 21.20 23.30
2 сеанс был - 10.10, 12.30, 14.40, 16.50, 19.00, 21.15, 23.25
а после использования нашего способа 2 сеанс стал - 16.55 19.05 21.20 23.30 10.10 12.30 14.40 16.50 19.00 21.15 23.25.
Видите к нему добавилось время первого сеанса и т.д. к 3 сеансу уже добавляется время 1 сеанса и время 2 сеанса, ...
Можно ли это исправить? Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(30.01.2008 в 11:35)
| | Угу, не учел этого.
Если я правильно понял, то вы делали по первому примеру. Тогда после строки
echo $seans['hall'].'-'.$stime.'<br>';
| добавьте строку
Или убрать $stime=''; в начале скрипта и поместить эту строку в самое начало цикла, с помощью которого вы выводите результаты выборки
while($seans = mysql_fetch_array($result_seans)){
$stime='';
И т.д.
|
| |
|
|
|
|
|
|
|
для: not detected
(30.01.2008 в 14:08)
| | Отлично работает. Спасибо. ))) | |
|
|
|
|
|
|
|
для: kis-kis
(30.01.2008 в 14:26)
| | Пожалуйста. Рад был помочь:) | |
|
|
|
|
|
|
|
для: not detected
(30.01.2008 в 14:34)
| | - | |
|
|
|