Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с временем, strtotime() плохо работает 
V
    Опции темы
EvgenYakut
  Дата 27.8.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 27.8.2007
Где: Украина Луганск

Репутация: нет
Всего: нет



Доброго времени суток 
Для выводимых записей ОЧЕНЬ важна давность их добавления. поэтому необходимо кроме сортировки визуально выделить наиболее новые данные. В таблице БД(мускул) есть поле характеризубщее время и дату добавления записи(datetime,). 

Задача: Вывести таблицу из всех имеющихся записей так чтобы записи добавленые менее часу назад выделялись красным бекграундом, более часу но менее двух - оранжевым и т.д. до фиолетового цвета.(такая себе радуга) Тоесть всего семь. Требуется учесть что записей может быть много и их потребуется выводить на несколько строничек допустим по 50 штук/строницу, а красных заявок может быть 2-3 а может быть 100-150. 

Первая идея которая меня посетила заключается в том чтобы для каждой выводимой заявки расчитывать её цвет и соответственнопихать его в бекграунд строки. Для этого я написал следующие скрипт
Код

$r_t=time()-strtotime($value['time']); 
switch ($r_t) { 
  case $r_t<3600: $color='#FF9D9D';break; 
  case $r_t>=3600 && $r_t<7200: $color='#FFC993';break; 
    case $r_t>=7200 && $r_t<10800: $color='#FFFFAE';break; 
    case $r_t>=10800 && $r_t<14400: $color='#BBFFBB';break; 
    case $r_t>=14400 && $r_t<18000: $color='#B0FFFF';break; 
    case $r_t>=18000 && $r_t<21600: $color='#9F9FFF';break; 
    case $r_t>=21600: $color='#D2A6FF'; break;

НО ВОТ В ЧЕМ ПРОБЛЕМА по непонятной мне причине иногда, может не каждый раз а может 10 раз подряд, некоректно считается strtotime($value['time']) а именно увеличивает его на n-ное количество секунд. При этом некоких ошибок он мне невыдает (ini_set('display_errors',1); error_reporting(E_ALL); )
ВОПРОС: как исправить сложившуюся ситуацию?? Это сбои на сервере??(если поговорить с хостером он может помочь?) можноли переделать скрипт так чтобы он работал без збоев??
PM MAIL   Вверх
sTa1kEr
Дата 27.8.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



EvgenYakut, почему бы вам не брать из MySQL сразу метку времени, а не строку с датой? Возможно, даже лучше сразу высчитывать сколько пройдено времени
Код

SELECT UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`date`) AS `interval` FROM table;

PM MAIL   Вверх
EvgenYakut
  Дата 27.8.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 27.8.2007
Где: Украина Луганск

Репутация: нет
Всего: нет



Я прошу прощения sTa1kEr но наверно я сильно тормажу smile  и вообще у меня с SQL не очень, а незатруднит ли тебя написать ПХП код  который в $r_t записывал бы разницу в секундах а то меня этот "AS `interval`" почемуто вгоняет в ступор smile 
если я просто напишу 
Код

$query = "SELECT UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`date`) AS `interval` FROM table WHERE id = 1";
$r_t_1 = mysql_query($query);
$r_t=mysql_fetch_array($r_t_1);

то я что в $r_t получу ?? разницу(сегодняшнее время/время из поля date) времени в секундах для записи чей id = 1????
я посмотрел по SELECT UNIX_TIMESTAMP() она вроде должна работать если date хранится как datetime или я ошибаюсь????
PM MAIL   Вверх
sTa1kEr
Дата 27.8.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(EvgenYakut @  27.8.2007,  18:15 Найти цитируемый пост)
то я что в $r_t получу ?? разницу(сегодняшнее время/время из поля date) времени в секундах для записи чей id = 1????

Именно. И эта запись будет в массиве с индексом "interval"
Код

$query = "SELECT UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`date`) AS `interval` FROM table WHERE id = 1";
$r_t_1 = mysql_query($query);
$r_t=mysql_fetch_array($r_t_1);
echo $r_t["interval"];


Цитата(EvgenYakut @  27.8.2007,  18:15 Найти цитируемый пост)
я посмотрел по SELECT UNIX_TIMESTAMP() она вроде должна работать если date хранится как datetime или я ошибаюсь????

Да, в качестве параметра она принимает значение типа datetime или если она вызвана без параметров, то возвращает текущую метку времени (аналогично функции time() в PHP). Если у вас дата хранится в integer, то достаточно просто вычесть это значение из UNIX_TIMESTAMP().

Это сообщение отредактировал(а) sTa1kEr - 27.8.2007, 19:06
PM MAIL   Вверх
EvgenYakut
  Дата 28.8.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 27.8.2007
Где: Украина Луганск

Репутация: нет
Всего: нет



 smile УРА помогло!!!! smile 
И как я сам недогадался отдать обработку времени SQLю 
Вообщем тему наверно можно считать закрытой, хотя если есть какие либо замечания, уточнения или еще что пишите внимательно прочту
П.С. я бы добавил  sTa1kEr плюсик за помощь (я был на трех форумах с этим вопросом безрезультатно) но система говорит что я тут типа еще никто чтоб плюсики раздавть, посмотрим может я и исправлю это положение может и мой горький опыт кому нибуть пригодится smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.