webirus
@webirus
Тыжверстальщик! Наверстай мне упущенное...

Как выводится дата и почему так?

Есть у меня в базе поле usercreate
В этом поле содержится запись вида 1271513958
На сайте это поле выводится

<?= time_counter($user_inf['usercreate'], 1, "дни") ?>

Но есть один косяк = 8 год 91 день
Должно быть 8 лет, а написано 8 год.

Вот сама функция (честно говоря, не догоняю, как доработать).

function time_counter($date, $type=0, $tvis = '', $fstr = 0) {

     if ($type==1) {  $check_time =  time() - $date; }  # обратный счетчик
     elseif ($type==2) {  $check_time =  $date; }       # счетчик
     else { $check_time = $date - time();  }            # счетчик

	// if($check_time <= 0){ return false; }            # стоп счетчик

	 $year    = floor($check_time / 31536000);          # 365 дней
	 $days    = floor(($check_time%31536000) / 86400);  # $days = floor($check_time / 86400 - ($year * 365));
	 $hours   = floor(($check_time%86400) / 3600);
	 $minutes = floor(($check_time%3600) / 60);
	 $seconds = $check_time%60;

	 $str = '';

# Года
	 if($year > 0) $str .= declension($year, array('год','года','год'), $fstr).' ';
# дни
    if ($type==1) {
      if(($year == 0 && $days != 0) || substr_count($tvis,"дни") && $days != 0){ $str .= declension($days,array('день','дня','дней')).' '; }
    } else {
	 if (substr_count($tvis,"час")) { if($days > 0) $str .= declension($days,array('день','дня','дней')).' '; }
    }
# часы
    if ($type==1) {
      if(($year == 0 && $days == 0 && $hours != 0) || substr_count($tvis,"час") && $hours != 0){ $str .= declension($hours,array('час','часа','часов')).' '; }
    } else {
	 if (substr_count($tvis,"час")) { if($hours > 0) $str .= declension($hours,array('час','часа','часов')).' '; }
    }
# минуты
    if ($type==1) {
      if(($days == 0) && ($hours == 0)and($minutes != 0)){ $str .= declension($minutes,array('минута','минуты','минут')).' '; }
    } else {
	 if (substr_count($tvis,"мин")) { if($minutes > 0) $str .= declension($minutes,array('минута','минуты','минут')).' '; }
    }
# секунды
    if ($type==1) {
      if(($days == 0)and($hours == 0)and($minutes == 0)and($seconds != 0)){ $str .= declension($seconds, array('секунда','секунды','секунд')).' '; }
    } else {
      if (substr_count($tvis,"сек")) { if($seconds > 0) $str .= declension($seconds,array('секунда','секунды','секунд'));  }
    }

  return $str;
}
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
yarkov
@yarkov
Помог ответ? Отметь решением.
Хотелось бы взглянуть на код функции declension, но внутренний телепат говорит, что строку
declension($year, array('год','года','год'), $fstr)
надо заменить на
declension($year, array('год','года','лет'), $fstr)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Alexufo
@Alexufo
противоречивый, сложный, весь компьютерный.
Ковырять функцию формирования человекочитаемой даты time_counter(). База тут вообще не причем.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы