Время подачи объявления и обновление раз в сутки

  • 12 Ответов
  • 2667 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

max_1985

  • Завсегдатай
  • *****
  • 598
  • 55
Как реализовать чтоб к дате выводилось еще и время?

Для отображения даты я так понимаю используется ф-ция:
function reorderDate( $date ){
      $format = JText::_('ADSMANAGER_DATE_FORMAT_LC');
      
      if ($date && (preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/",$date,$regs))) {
         $date = mktime( 0, 0, 0, $regs[2], $regs[3], $regs[1] );
         $date = $date > -1 ? strftime( $format, $date) : '-';
      }
      return $date;
   }
и echo $this->reorderDate($content->date_created);
Может можно как поправить, подскажите!
« Последнее редактирование: 15.07.2012, 01:15:51 от max_1985 »

*

Grendy

  • Давно я тут
  • ****
  • 247
  • 25
Re: Время подачи объявления
« Ответ #1 : 13.07.2012, 21:59:19 »
Как реализовать?

Для отображения даты я так понимаю используется ф-ция:
function reorderDate( $date ){
      $format = JText::_('ADSMANAGER_DATE_FORMAT_LC');
      
      if ($date && (preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/",$date,$regs))) {
         $date = mktime( 0, 0, 0, $regs[2], $regs[3], $regs[1] );
         $date = $date > -1 ? strftime( $format, $date) : '-';
      }
      return $date;
   }
и echo $this->reorderDate($content->date_created);
Может можно как поправить, подскажите!

Хм. Дата подачи - дата размещения? Тогда в чём, собственно, вопрос, если код вы уже привели?

Дата создания = дата "подачи" = дата размещения = $this->content->date_created

Вообще просто вывести дату размещения можно простым <?php echo $this->content->date_created; ?>, а предложенная вами функция приводит её к определённому виду. Если конкретизировать ответ, функция отбрасывает время размещения и немного меняет формат даты (из 2012-07-13 в 13.07.2012).

Не знаете, куда вставить код функции? Нужно именно "число:месяц:год час:минута:секунды" ? Или что-то другое? Опишите задачу поконкретнее...
Плюс в репутацию больше говорит о благодарности, чем слово "Спасибо" в теме, которую повторно, возможно, никогда уже не посетишь.

*

Grendy

  • Давно я тут
  • ****
  • 247
  • 25
Re: Время подачи объявления
« Ответ #2 : 13.07.2012, 22:22:31 »
На всякий случай, если дело действительно ограничивалось часами и минутами...

Самый лёгкий способ: в файле русификации (ru-RU.com_adsmanager.ini) (или в файле, который соответствует используемому на сайте языку) ищите строчку ADSMANAGER_DATE_FORMAT_LC и дописывайте/удаляйте ненужное.

К примеру, значение "%H:%M %d.%m.%Y" будет выводить дату и время в формате "Час:Минуты День.Месяц.Год". При желании можно добавить ещё и секунды (но зачем?) - %H:%M:%S.

Лично я вижу один небольшой минус: когда человек будет обновлять объявление, часы и минуты будут сбрасываться на 00:00, что в итоге и отобразится на сайте. Очень некрасиво будет смотреться...
Плюс в репутацию больше говорит о благодарности, чем слово "Спасибо" в теме, которую повторно, возможно, никогда уже не посетишь.

*

max_1985

  • Завсегдатай
  • *****
  • 598
  • 55
Re: Время подачи объявления
« Ответ #3 : 13.07.2012, 22:40:35 »
Нужно число:месяц:год
             час:минута
%H:%M - если я это добавляю то во всех объявлениях даже только-что поданых, везде 00:00
http://bezgazet.kiev.ua/all_ads.html
« Последнее редактирование: 14.07.2012, 01:55:49 от max_1985 »

*

max_1985

  • Завсегдатай
  • *****
  • 598
  • 55
Re: Время подачи объявления
« Ответ #4 : 14.07.2012, 01:15:11 »
Сделал так:
if ( $date && ereg( "([0-9]{4})-([0-9]{2})-([0-9]{2})[ ]([0-9]{2}):([0-9]{2}):([0-9]{2})", $date, $regs ) ) {
$date = mktime( $regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1] );
$date = $date > -1 ? strftime( $format, $date + ($offset*60*60) ) : '-';
}
и "%H:%M %d.%m.%Y"
Все вроде нормально показывает но,
Теперь при обновлении объявления время становится 00:00 и объявление соответственно не в самом верху. (в принципе эта проблема у Всех, заметьте если обновляешь объявление и в этот день кто-то публиковал объявление, то Ваше будет ниже )
Как решить?

Может здесь что-то изменить:
<?php echo JText::_('ADSMANAGER_EXPIRATION_DATE')?>: <?php echo $this->reorderDate($content->expiration_date)?>
или что-то в базе надо поправить?
« Последнее редактирование: 14.07.2012, 03:15:33 от max_1985 »

*

Grendy

  • Давно я тут
  • ****
  • 247
  • 25
Re: Время подачи объявления
« Ответ #5 : 14.07.2012, 06:28:16 »
Сделал так:
if ( $date && ereg( "([0-9]{4})-([0-9]{2})-([0-9]{2})[ ]([0-9]{2}):([0-9]{2}):([0-9]{2})", $date, $regs ) ) {
$date = mktime( $regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1] );
$date = $date > -1 ? strftime( $format, $date + ($offset*60*60) ) : '-';
}
и "%H:%M %d.%m.%Y"
Все вроде нормально показывает но,
Теперь при обновлении объявления время становится 00:00 и объявление соответственно не в самом верху. (в принципе эта проблема у Всех, заметьте если обновляешь объявление и в этот день кто-то публиковал объявление, то Ваше будет ниже )
Как решить?

Может здесь что-то изменить:
<?php echo JText::_('ADSMANAGER_EXPIRATION_DATE')?>: <?php echo $this->reorderDate($content->expiration_date)?>
или что-то в базе надо поправить?

А нужно, чтобы оно в самый верх попадало при обновлении? Злоупотреблять функцией начнут же :)

Чтобы всё делалось "автоматом", смотрите в сторону функции function renewContent в файле administrator/components/com_adsmanager/models/content.php. Скорее всего, в ней достаточно будет заменить date_created = CURDATE() на что-то, что бы учитывало ещё и Часы:Минуты, когда нажали на кнопочку "Продлить". Как вариант, можно посмотреть в сторону функции сохранения объявления (в каком файле находится функция, не знаю) при размещении и оттуда выдернуть нужное.

Не знаю, будет ли это решением, так как проверить не на чём, но можно сделать следующее:

В файле administrator/components/com_adsmanager/models/content.php в функции renewContent находим строчки

Код
		$newdate = date("Y-m-d",$time);

$this->_db->setQuery( "UPDATE #__adsmanager_ads SET expiration_date = '$newdate', date_created = CURDATE(),recall_mail_sent=0,published=1 WHERE id=".(int)$contentid." and recall_mail_sent = 1");

Создаём и дописываем переменную $newdatecr и правим запрос, чтобы в итоге получилось следующее

Код
		$newdate = date("Y-m-d",$time);
$newdatecr = date("Y-m-d H:i:s");
$this->_db->setQuery( "UPDATE #__adsmanager_ads SET expiration_date = '$newdate', date_created = '$newdatecr',recall_mail_sent=0,published=1 WHERE id=".(int)$contentid." and recall_mail_sent = 1");

Должно будет записываться то время, в которое пользователь нажал на кнопочку "Продлить" (либо "Обновить"). Проверьте, возможно, это и есть решение.
Плюс в репутацию больше говорит о благодарности, чем слово "Спасибо" в теме, которую повторно, возможно, никогда уже не посетишь.

*

max_1985

  • Завсегдатай
  • *****
  • 598
  • 55
Re: Время подачи объявления
« Ответ #6 : 14.07.2012, 12:05:56 »
Сейчас при обновлении записывается  дата и время создания объявления.

Да забыл сказать что ф-ция renewContent у меня имеет вид:

Код
function renewContent($contentid,$ad_duration)
{

$this->_db->setQuery( "UPDATE #__adsmanager_ads SET expiration_date = DATE_ADD(CURDATE(), INTERVAL +$ad_duration DAY), date_created = CURDATE(),recall_mail_sent=0,published=1 WHERE id=".(int)$contentid);
$this->_db->query();
}
Отличается от исходного наверно что-то менял.
« Последнее редактирование: 14.07.2012, 12:36:01 от max_1985 »

*

max_1985

  • Завсегдатай
  • *****
  • 598
  • 55
Re: Время подачи объявления
« Ответ #7 : 14.07.2012, 14:23:28 »
Сделал:
CURDATE() заменил на NOW()

Было бы не плохо сделать чтоб юзер мог обновлять объявление раз в сутки
« Последнее редактирование: 14.07.2012, 14:47:22 от max_1985 »

*

max_1985

  • Завсегдатай
  • *****
  • 598
  • 55
Может кто решил чтоб обновлять объявление можно было раз в сутки?

*

girlwolf

  • Осваиваюсь на форуме
  • ***
  • 127
  • 3
Возможность обновления (поднятия) объявлений раз в сутки:

В файле administrator/components/com_adsmanager/models/content.php заменить функцию RenewContent на эту:

Код
function renewContent($contentid,$ad_duration)
{
$this->_db->setQuery( "SELECT date_created FROM #__adsmanager_ads WHERE id = ".(int)$contentid);
$obnovka_date = $this->_db->loadResult();
$time = strtotime($obnovka_date);
$time = $time + (3600 *24);


if (time() > $time){
$this->_db->setQuery( "UPDATE #__adsmanager_ads SET expiration_date = DATE_ADD(NOW(), INTERVAL +$ad_duration DAY), date_created = NOW(),recall_mail_sent=0,published=1 WHERE id=".(int)$contentid);
$this->_db->query();
}

}

*

max_1985

  • Завсегдатай
  • *****
  • 598
  • 55
Возможность обновления (поднятия) объявлений раз в сутки:

В файле administrator/components/com_adsmanager/models/content.php заменить функцию RenewContent на эту:

Код
function renewContent($contentid,$ad_duration)
{
$this->_db->setQuery( "SELECT date_created FROM #__adsmanager_ads WHERE id = ".(int)$contentid);
$obnovka_date = $this->_db->loadResult();
$time = strtotime($obnovka_date);
$time = $time + (3600 *24);


if (time() > $time){
$this->_db->setQuery( "UPDATE #__adsmanager_ads SET expiration_date = DATE_ADD(NOW(), INTERVAL +$ad_duration DAY), date_created = NOW(),recall_mail_sent=0,published=1 WHERE id=".(int)$contentid);
$this->_db->query();
}

}
Что-то не прокатило.

*

Frics

  • Осваиваюсь на форуме
  • ***
  • 32
  • 0
Подскажите как изменить часовой пояс? вывод объявления с часами и минутами получилось вот только время московское а мне нужно на два часа позже

*

СерьёгА

  • Захожу иногда
  • **
  • 18
  • 0
Что-то не прокатило.
Решил проблему?