Въпрос за дата и чат (преди - секунди, минути, часа, дни..)

RiddleR

Registered
Четох из форума сума ти теми за тия неща и нито едно не работи при мене :shock:

Искам да направя след като си добавил нещо, да изкарва, преди 1 секунда, Преди 20 часа, преди 1 месец и т.н., но не можах да намеря работещ код тук.

записвам датата така: $date = time();
 
PHP:
function article_date($datefrom,$dateto=-1)
{
	$datedi = date("d.m.Y, H:i",$datefrom);
	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);
	while (mktime(date("H", $datefrom), date("i", $datefrom),
	date("s", $datefrom), date("n", $datefrom)+($months_difference),
	date("j", $dateto), date("Y", $datefrom)) < $dateto)
	{
	$months_difference++;
	}
	$datediff = $months_difference;
	if($datediff==12)
	{
	$datediff--;
	}
	$res = ($datediff==1) ? "на $datedi" : "$datedi";
	break;
	case "y":
	$datediff = floor($difference / 60 / 60 / 24 / 365);
	$res = ($datediff==1) ? "на $datedi" : "$datedi";
	break;
	case "d":
	$datediff = floor($difference / 60 / 60 / 24);
	$res = ($datediff==1) ? "преди 1 ден" : "$datedi";
	break;
	case "ww":
	$datediff = floor($difference / 60 / 60 / 24 / 7);
	$res = ($datediff==1) ? "на $datedi" : "$datedi";
	break;
	case "h":
	$datediff = floor($difference / 60 / 60);
	$res = ($datediff==1) ? "преди $datediff час" : "преди $datediff часа";
	break;
	case "n":
	$datediff = floor($difference / 60);
	$res = ($datediff==1) ? "преди $datediff минута" : "преди $datediff минути";
	break;
	case "s":
	$datediff = $difference;
	$res = ($datediff==1) ? "преди $datediff секунда" : "преди $datediff секунди";
	break;
	}
	return $res;
}

А ето така ще я извеждаш echo article_date(time(), 1);
 
ето за тук ми трябва това :

PHP:
   <?
          $id = $_GET['id'];

         $rq = mysql_query("SELECT * FROM comn WHERE article='$id'");
         $broi = mysql_num_rows($rq);
         $limit = 5;
 



         if((int)$_GET['page']>0) {
             $page = (int)$_GET['page'];
         }
         else {
             $page = 0;
         }
         $maxpage = ceil($broi/$limit);
          $id = $_GET['id'];
         $runq = mysql_query("SELECT * FROM comn WHERE article='$id' ORDER BY id DESC LIMIT ".$limit*$page.", ".$limit."");
                                                       
       

   
while($row = mysql_fetch_array($runq)) {

  
        




             echo "<div style=\"background: #ecffcf; width: 490px; border: 1px solid #CCC; padding: 5px; margin-top: 5px;\"> $row[username] каза ( [b]tuk trqbva da e datata[/b] ):";


             echo "<br /> $row[text] $date</div>";
         }
         echo "<br />";
        $run_q = mysql_query("SELECT * FROM `comn` WHERE article='$id'");
        $data = mysql_fetch_assoc($run_q);
         if($data['article']==$id) {
         for($i=0;$i<$maxpage;$i++) {
             echo "[<a href='news-$id.html&page=$i'> ".($i+1)." </a>] ";
         }   }
         ?>
 
искам, с кода който изкарвам по горе коментари, да сложа това в него дето са ми дали в темата.
 
Промени си тези редове:

$timepass = article_date($row['date'],);
echo '$timepass';


PHP:
   <?
          $id = $_GET['id'];

         $rq = mysql_query("SELECT * FROM comn WHERE article='$id'");
         $broi = mysql_num_rows($rq);
         $limit = 5;
 
function article_date($datefrom,$dateto=-1)
{
        $datedi = date("d.m.Y, H:i",$datefrom);
        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);
        while (mktime(date("H", $datefrom), date("i", $datefrom),
        date("s", $datefrom), date("n", $datefrom)+($months_difference),
        date("j", $dateto), date("Y", $datefrom)) < $dateto)
        {
        $months_difference++;
        }
        $datediff = $months_difference;
        if($datediff==12)
        {
        $datediff--;
        }
        $res = ($datediff==1) ? "на $datedi" : "$datedi";
        break;
        case "y":
        $datediff = floor($difference / 60 / 60 / 24 / 365);
        $res = ($datediff==1) ? "на $datedi" : "$datedi";
        break;
        case "d":
        $datediff = floor($difference / 60 / 60 / 24);
        $res = ($datediff==1) ? "преди 1 ден" : "$datedi";
        break;
        case "ww":
        $datediff = floor($difference / 60 / 60 / 24 / 7);
        $res = ($datediff==1) ? "на $datedi" : "$datedi";
        break;
        case "h":
        $datediff = floor($difference / 60 / 60);
        $res = ($datediff==1) ? "преди $datediff час" : "преди $datediff часа";
        break;
        case "n":
        $datediff = floor($difference / 60);
        $res = ($datediff==1) ? "преди $datediff минута" : "преди $datediff минути";
        break;
        case "s":
        $datediff = $difference;
        $res = ($datediff==1) ? "преди $datediff секунда" : "преди $datediff секунди";
        break;
        }
        return $res;
}



         if((int)$_GET['page']>0) {
             $page = (int)$_GET['page'];
         }
         else {
             $page = 0;
         }
         $maxpage = ceil($broi/$limit);
          $id = $_GET['id'];
         $runq = mysql_query("SELECT * FROM comn WHERE article='$id' ORDER BY id DESC LIMIT ".$limit*$page.", ".$limit."");
                                                       
       

   
while($row = mysql_fetch_array($runq)) {

  
        $timepass = article_date($row['date'],);
echo '$timepass';


             echo "<div style=\"background: #ecffcf; width: 490px; border: 1px solid #CCC; padding: 5px; margin-top: 5px;\"> $row[username] каза ( [b]tuk trqbva da e datata[/b] ):";


             echo "<br /> $row[text] $date</div>";
         }
         echo "<br />";
        $run_q = mysql_query("SELECT * FROM `comn` WHERE article='$id'");
        $data = mysql_fetch_assoc($run_q);
         if($data['article']==$id) {
         for($i=0;$i<$maxpage;$i++) {
             echo "[<a href='news-$id.html&page=$i'> ".($i+1)." </a>] ";
         }   }
         ?>
 
Или може би трябва да е тук мястото на кода :

$run_q = mysql_query("SELECT * FROM `comn` WHERE article='$id'");
$data = mysql_fetch_assoc($run_q);

$timepass = article_date($data['date'],);
echo '$timepass';

Настрой си нещата в червено :)
PHP:
   <?
          $id = $_GET['id'];

         $rq = mysql_query("SELECT * FROM comn WHERE article='$id'");
         $broi = mysql_num_rows($rq);
         $limit = 5;
 
function article_date($datefrom,$dateto=-1)
{
        $datedi = date("d.m.Y, H:i",$datefrom);
        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);
        while (mktime(date("H", $datefrom), date("i", $datefrom),
        date("s", $datefrom), date("n", $datefrom)+($months_difference),
        date("j", $dateto), date("Y", $datefrom)) < $dateto)
        {
        $months_difference++;
        }
        $datediff = $months_difference;
        if($datediff==12)
        {
        $datediff--;
        }
        $res = ($datediff==1) ? "на $datedi" : "$datedi";
        break;
        case "y":
        $datediff = floor($difference / 60 / 60 / 24 / 365);
        $res = ($datediff==1) ? "на $datedi" : "$datedi";
        break;
        case "d":
        $datediff = floor($difference / 60 / 60 / 24);
        $res = ($datediff==1) ? "преди 1 ден" : "$datedi";
        break;
        case "ww":
        $datediff = floor($difference / 60 / 60 / 24 / 7);
        $res = ($datediff==1) ? "на $datedi" : "$datedi";
        break;
        case "h":
        $datediff = floor($difference / 60 / 60);
        $res = ($datediff==1) ? "преди $datediff час" : "преди $datediff часа";
        break;
        case "n":
        $datediff = floor($difference / 60);
        $res = ($datediff==1) ? "преди $datediff минута" : "преди $datediff минути";
        break;
        case "s":
        $datediff = $difference;
        $res = ($datediff==1) ? "преди $datediff секунда" : "преди $datediff секунди";
        break;
        }
        return $res;
}



         if((int)$_GET['page']>0) {
             $page = (int)$_GET['page'];
         }
         else {
             $page = 0;
         }
         $maxpage = ceil($broi/$limit);
          $id = $_GET['id'];
         $runq = mysql_query("SELECT * FROM comn WHERE article='$id' ORDER BY id DESC LIMIT ".$limit*$page.", ".$limit."");
                                                       
       

   
while($row = mysql_fetch_array($runq)) {

 


             echo "<div style=\"background: #ecffcf; width: 490px; border: 1px solid #CCC; padding: 5px; margin-top: 5px;\"> $row[username] каза ( [b]tuk trqbva da e datata[/b] ):";


             echo "<br /> $row[text] $date</div>";
         }
         echo "<br />";
        $run_q = mysql_query("SELECT * FROM `comn` WHERE article='$id'");
        $data = mysql_fetch_assoc($run_q);

        $timepass = article_date($data['date'],);
echo '$timepass';

         if($data['article']==$id) {
         for($i=0;$i<$maxpage;$i++) {
             echo "[<a href='news-$id.html&page=$i'> ".($i+1)." </a>] ";
         }   }
         ?>
 
там където си го сложил е за страниците на коментарите. Няма как да е там.

таблицата на датата е $date.
 
RiddleR каза:
там където си го сложил е за страниците на коментарите. Няма как да е там.

таблицата на датата е $date.
Погледни предния ми коментар ! Постнах два един след друг и аз се сетих, че това може да е проблема :)
 
когато го сложа всичкия код, не показва коментари, когато махна този ред:

Код:
$timepass = article_date($row['date'],);


и се показват.

Едит: махнат запетайката и сега ми показва само $timepass

оправих го!!!
 
RiddleR каза:
когато го сложа всичкия код, не показва коментари, когато махна този ред:

Код:
$timepass = article_date($row['date'],);


и се показват.

Едит: махнат запетайката и сега ми показва само $timepass

$data = mysql_fetch_assoc($run_q); замени го с $data = mysql_fetch_array($run_q);
 
оправих го, но само да питам

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

това тук какво трябва да бъде ? месеци, години, седмици?
 

Back
Горе