TimeAgo Function

critrate

Registered
Здравейте.Използвам този скрипт за да изкарвам преди колко време дадено нещо е добавено.

Пример : преди 10 минути.

До сега не съм имал проблем,но от както качих сайта в нета на някои новини,видео вместо да ми показва от колкото време ми показва следното.

преди -47470 секунди

:(

Гледах кода и не можах да открия от къде идва това.Ще съм ви много благодарен ако ударите едно рамо.

PHP:
function TimeAgo($datefrom,$dateto=-1)
{

  if($datefrom <= 0) { return "Преди много време"; }
  
  if($dateto == -1) { $dateto = time(); }

  $difference = $dateto - $datefrom;

  if($difference < 60)
  {
    $interval = "s";
  }

  elseif($difference >= 60 && $difference < 60*60)
  {
    $interval = "n";
  }

  elseif($difference >= 60*60 && $difference < 60*60*24)
  {
    $interval = "h";
  }

  elseif($difference >= 60*60*24 && $difference < 60*60*24*7)
  {
    $interval = "d";
  }

  elseif($difference >= 60*60*24*7 && $difference < 60*60*24*30)
  {
    $interval = "ww";
  }

  elseif($difference >= 60*60*24*30 && $difference < 60*60*24*365)
  {
    $interval = "m";
  }

  elseif($difference >= 60*60*24*365)
  {
    $interval = "y";
  }


  switch($interval)
  {
    case "m":
      $months_difference = floor($difference / 60 / 60 / 24 /
      29);

      $datediff = $months_difference;

      if($datediff==12)
      {
        $datediff--;
      }

      $res = ($datediff==1) ? "преди месец" : "преди $datediff месеца";
      break;

    case "y":
      $datediff = floor($difference / 60 / 60 / 24 / 365);
      $res = ($datediff==1) ? "преди година" : "преди $datediff години";
      break;

    case "d":
      $datediff = floor($difference / 60 / 60 / 24);
      $res = ($datediff==1) ? "преди един ден" : "преди $datediff дена";
      break;

    case "ww":
      $datediff = floor($difference / 60 / 60 / 24 / 7);
      $res = ($datediff==1) ? "преди седмица" : "преди $datediff седмици";
      break;

    case "h":
      $datediff = floor($difference / 60 / 60);
      $res = ($datediff==1) ? "преди час" : "преди $datediff часа";
      break;

    case "n":
      $datediff = floor($difference / 60);
      $res = ($datediff==1) ? "преди минута" : "преди $datediff минути";
      break;

    case "s":
      $datediff = $difference;
      $res = ($datediff==1) ? "преди секунда" : "преди $datediff секунди";
      break;
  }
  return $res;
}
 
Провери също и данните, които пращаш към скрипта дали те не са грешни.
Например може часовата зона на сървъра да е грешна или при самото записване на данните някъде да не записва правилно.
 
Може да не записваш датата правилно. Ей това работи с time stamp ( резултата на time()):

Код:
<?php
function ago($time)
{
   $periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
   $lengths = array("60","60","24","7","4.35","12","10");

   $now = time();

       $difference     = $now - $time;
       $tense         = "ago";

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

   $difference = round($difference);

   if($difference != 1) {
       $periods[$j].= "s";
   }

   return "$difference $periods[$j] 'ago' ";
}
?>
 
Fakeheal благодаря ти.След малко ще го видя.

Попринцип записвам в дб time();

и след това го извиква.

Бъга се появи когато се преместих на хостинг.При локалхост нямах никакви проблеми :cry:
 

Back
Горе