Помогите переделать функцию времени и даты

Печать RSS
261

Автор
Землянин
0
Ребят..помогите переделать функцию даты и времени под мой скрипт..вот сама функция
/**
* Время файла
*/
function itime($created_at) { 
    switch (datetime('j n Y', $created_at)) { 
        case datetime('j n Y'): 
            return '<span style="color: red;">Сегодня в ' . datetime('H:i', $created_at) .' </span>'; 
            break; 
        case datetime('j n Y', $_SERVER['REQUEST_TIME'] - 86400): 
            return '<span style="color: green;">Вчера в ' . datetime('H:i', $created_at).'</span>'; 
            break; 
        default: 
            return strtr(datetime('j M Y в H:i', $created_at), array('Jan' => 'Янв', 
                'Feb' => 'Фев', 
                'Mar' => 'Марта', 
                'Apr' => 'Апр', 
                'May' => 'Мая', 
                'Jun' => 'Июня', 
                'Jul' => 'Июля', 
                'Aug' => 'Авг', 
                'Sep' => 'Сент', 
                'Oct' => 'Окт', 
                'Nov' => 'Ноября', 
                'Dec' => 'Дек')); 
            break; 
    } 
}
В базе данных есть табличка search в ней столбец created_at в ней содержится дата в формате 2013-08-27 19:45:45
created_at создаётся так
`created_at` datetime DEFAULT NULL,
а time из первой функции так
`time` int(11) NOT NULL,

Вотр так выводится если брать функцию написанную в начале:
<b>Дата публикации:</b> <?php echo itime($file['time']) ?><br />
А вот так в моём случае как сейчас
<?php if ( $track['created_at'] ): ?> Дата размещения: <strong><?php echo itime($track['created_at']); ?> <?php endif ?></strong>
Помогите подстроить функцию под эти параметры.
Изменил: Владимир (30.08.2013 / 16:59)
Автор
Землянин
0
Как я понял почему не отображается дата согласно функции это потому что значение даты в формате datetime а для функции оно должно быть в формате int .Как быть?как функцию переписать под datetime ?

Оранжевые штаны
0
эта
itime($created_at)
функция на твоем скрипте есть ?
Автор
Землянин
0
VIP-club.adidas (30 Августа 2013 / 14:55)
эта
itime($created_at)
функция на твоем скрипте есть ?
да..вот какая сейчас (но она неправильно отображает дату добавления файла..вот только добавил а пишет: в течении 60 минут)

function itime( $date ) {
  if ( !$date ) {
    return null;
  }
//return $date;
//$date = new \DateTime($date); 
  
  $periods = array(
    array("секунда", "секунды", "секунд"), 
    array("минута", "минуты", "минут"), 
    array("час", "часа", "часов"), 
    array("день", "дня", "дней"),
    array("неделя", "недели", "неделей"), 
    array("месяц", "месяца", "месяцев"), 
    array("год", "года", "лет"), 
    array("декада", "декады", "декад")
  );
  $lengths = array("60", "60", "24", "7", "4.35", "12", "10");

  $now = time();
$unix_date = $date->getTimestamp();
//$unix_date = strtotime($date);

  if ( $now > $unix_date ) {    
    $difference = $now - $unix_date;
    $tense = 0;
  } else {
    $difference = $unix_date - $now;
    $tense = 1;
  }

  for ( $j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++ ) {
    $difference /= $lengths[$j];
  }

  $difference = round($difference);
  $period = rutext($difference, $periods[$j][0], $periods[$j][1], $periods[$j][2]);

  if ( !$tense ) {
    return "{$difference} {$period} назад";
  } else {
    return "в течении {$difference} {$period}";
  }
}

function rutext($int, $one, $two, $many) {
  $int = abs($int);
  $t1 = $int % 10;
  $t2 = $int % 100;

  return ($t1 == 1 && $t2 != 11 ? $one : ($t1 >= 2 && $t1 <= 4 && ($t2 < 10 || $t2 >= 20) ? $two : $many));
}
Автор
Землянин
0
ну или как вариант помогите поправить функцию та что выше постом..или скажите куда обратиться?а то ужен 3ёх форумах никт оне пишет и не может помочь
П

Пацак
0
MMdance (30 Августа 2013 / 14:49)
Как я понял почему не отображается дата согласно функции это потому что значение даты в формате datetime а для функции оно должно быть в формате int .Как быть?как функцию переписать под datetime ?
В SQL запросе
SELECT UNIX_TIMESTAMP(`created_at`) ...
и будет timestamp. Ну или как вариант в php
itime(strtotime($track['created at']));
Изменил: Петр (01.09.2013 / 15:44)
Автор
Землянин
0
Im-ieee (1 Сентября 2013 / 11:44)
В SQL запросе
SELECT UNIX_TIMESTAMP(`created_at`) ...
и будет timestamp. Ну или как вариант в php
itime(strtotime($track['created at']));
А что в запросе вместо троеточия?
П

Пацак
0
7. MMdance, я имел в виду, тебе нужно изменить запрос, которым ты берешь данные из базы: вместо поля created_at то, что я написал. (еще можно добавить AS created_at). Или, если там *, то самому перечислить все поля таблицы.
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск