Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод времени сеансов
 
 автор: kis-kis   (29.01.2008 в 10:43)   письмо автору
 
 

Время хранится в базе в виде - 10.10, 12.30, 14.40, 16.50, 19.00, 21.15, 23.25

Как сделать чтобы время, которое уже меньше текущего отмечалось, допустим, серым цветом, а которое больше - черным. Что-то вроде сеансов в афише.
Спасибо.

   
 
 автор: not detected   (29.01.2008 в 11:12)   письмо автору
 
   для: 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>блаблабла';
?>

//В этом случае если текущее время больше указанного то "серый цвет", иначе "черный". Должно работать:) . Правда идёт проверка лишь часов и минут. Следовательно с наступлением нового дня все начнется сначала.

   
 
 автор: kis-kis   (29.01.2008 в 11:51)   письмо автору
 
   для: not detected   (29.01.2008 в 11:12)
 

Вы взяли одно значение времени или все?

Так не работает. ((

   
 
 автор: not detected   (29.01.2008 в 13:36)   письмо автору
 
   для: kis-kis   (29.01.2008 в 11:51)
 

Да, одно. А вы как выводите эти данные? Не через цикл?

   
 
 автор: kis-kis   (29.01.2008 в 14:37)   письмо автору
 
   для: not detected   (29.01.2008 в 13:36)
 

нет, данные времени лежат в одном поле, тип varchar

   
 
 автор: kis-kis   (29.01.2008 в 16:32)   письмо автору
 
   для: 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>"; 
}

   
 
 автор: not detected   (29.01.2008 в 17:00)   письмо автору
 
   для: kis-kis   (29.01.2008 в 16:32)
 

Напишите пожалуйста полностью код с помощью которого вы выводите данные.

   
 
 автор: kis-kis   (29.01.2008 в 17:14)   письмо автору
 
   для: 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>"; 
}

}
}


Дамп во вложении

   
 
 автор: not detected   (29.01.2008 в 18:32)   письмо автору
 
   для: 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)) 

...дальше так как у вас написано.

   
 
 автор: kis-kis   (29.01.2008 в 18:44)   письмо автору
 
   для: 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>"; 
}


Какой из них оптимальнее использовать? И еще и в Вашем и в моем случае время после полуночи скрипт считает меньше текущего. Можно ли это исправить?

   
 
 автор: not detected   (29.01.2008 в 19:58)   письмо автору
 
   для: kis-kis   (29.01.2008 в 18:44)
 

Ґґ, ваш вариант намного лучше:) . Только думаю здесь date("H:i") вместо двоеточия лучше поставить точку date("H.i"); тогда получим дату как десятичную дробь и тогда уже можно сравнивать с нашими значениями, которые тоже рассматриваются как десятичная дробь.
Насчёт времени после полуночи: тут вроде каг надо ввести ещё одну переменную, в которой будет хранится время начала дня. Например считать новый день с 6.00 утра.

   
 
 автор: kis-kis   (29.01.2008 в 20:03)   письмо автору
 
   для: not detected   (29.01.2008 в 19:58)
 

>> Например считать новый день с 6.00 утра.

А как это реализовать? ))

И как теперь собрать все значения времени в единое целое? Мы же их разбивали ф-цией

$seans_list=explode(',', $seans['stime']);

Спасибо. ;-)

   
 
 автор: not detected   (29.01.2008 в 20:05)   письмо автору
 
   для: 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' и Т.д.

   
 
 автор: kis-kis   (29.01.2008 в 20: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>";

}

   
 
 автор: not detected   (30.01.2008 в 05:58)   письмо автору
 
   для: kis-kis   (29.01.2008 в 20:30)
 

дубль

   
 
 автор: not detected   (30.01.2008 в 06:05)   письмо автору
 
   для: kis-kis   (29.01.2008 в 20:30)
 

дубль

   
 
 автор: not detected   (30.01.2008 в 06:05)   письмо автору
 
   для: 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:41)   письмо автору
 
   для: not detected   (30.01.2008 в 06:05)
 

Опечатолся немного:
вместо
if(trim($val =='')) continue;
надо
if(trim($val) =='') continue;

   
 
 автор: kis-kis   (30.01.2008 в 11:35)   письмо автору
 
   для: 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 сеанса, ...

Можно ли это исправить? Спасибо.

   
 
 автор: not detected   (30.01.2008 в 14:08)   письмо автору
 
   для: kis-kis   (30.01.2008 в 11:35)
 

Угу, не учел этого.
Если я правильно понял, то вы делали по первому примеру. Тогда после строки
 echo $seans['hall'].'-'.$stime.'<br>'; 
добавьте строку
$stime='';

Или убрать $stime=''; в начале скрипта и поместить эту строку в самое начало цикла, с помощью которого вы выводите результаты выборки

while($seans = mysql_fetch_array($result_seans)){
$stime='';
И т.д.

   
 
 автор: kis-kis   (30.01.2008 в 14:26)   письмо автору
 
   для: not detected   (30.01.2008 в 14:08)
 

Отлично работает. Спасибо. )))

   
 
 автор: not detected   (30.01.2008 в 14:34)   письмо автору
 
   для: kis-kis   (30.01.2008 в 14:26)
 

Пожалуйста. Рад был помочь:)

   
 
 автор: kis-kis   (30.01.2008 в 17:55)   письмо автору
 
   для: not detected   (30.01.2008 в 14:34)
 

-

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования