php显示类似于facebook和youtube的评论年龄

时间:2013-12-01 15:38:14

标签: php mysql youtube timestamp forum

我已经建立了一个论坛系统但是我注意到所有提交的时间戳都是基于服务器时间的。无论如何,php都可以计算评论的年龄。

例如,在youtube上,时间显示为 - 40分钟前

2天前

1周前

等...

我能复制一下吗?

我在下面列了几个文件。一个将论坛条目提交到mysql,另一个显示内容。

这是添加主题代码 -

<?php
session_start();
$uname = $_SESSION['uname'];


$host="mysql.**************.co.uk"; // Host name 
$username="**********"; // Mysql username 
$password="****************"; // Mysql password 
$db_name="***************"; // Database name 
$tbl_name="forum_question"; // Table name 

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// get data that sent from form 
$topic=$_POST['topic'];
$detail=($_POST['detail']);
$name=$_POST['username'];
$datetime= date("d/m/y h:i:s"); //create date time

$sql="INSERT INTO $tbl_name(topic, detail, name, datetime)VALUES('$topic', '$detail', '$name', '$datetime')";
$result=mysql_query($sql);

if($result){
echo "Successful<BR>";
echo "<a href=main_forum.php>View your topic</a>";
}
else {
echo "ERROR";
}
mysql_close();
?>

这是显示论坛帖子的PHP -

<?php


session_start();
$uname = $_SESSION['uname'];


 function htmlallentities($str){
  $res = '';
  $strlen = strlen($str);
  for($i=0; $i<$strlen; $i++){
    $byte = ord($str[$i]);
    if($byte < 128) // 1-byte char
      $res .= $str[$i];
    elseif($byte < 192); // invalid utf8
    elseif($byte < 224) // 2-byte char
      $res .= '&#'.((63&$byte)*64 + (63&ord($str[++$i]))).';';
    elseif($byte < 240) // 3-byte char
      $res .= '&#'.((15&$byte)*4096 + (63&ord($str[++$i]))*64 + (63&ord($str[++$i]))).';';
    elseif($byte < 248) // 4-byte char
      $res .= '&#'.((15&$byte)*262144 + (63&ord($str[++$i]))*4096 + (63&ord($str[++$i]))*64 + (63&ord($str[++$i]))).';';
  }
  return $res;
}

$host="mysql.**********.co.uk"; // Host name 
$username="**********"; // Mysql username 
$password="**********"; // Mysql password 
$db_name="***********"; // Database name 
$tbl_name="forum_question"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// get value of id that sent from address bar 
$id=$_GET['id'];
$sql="SELECT * FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);
?>

<style>
  t{
    font-family:arial; 
    font-size:14px;
    line-height:18px;
  }
  </style>

<table width="600" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td><table width="100%" border="0" cellpadding="3" cellspacing="1" bordercolor="1" bgcolor="#FFFFFF">
<tr>
  <td bgcolor="#F8F7F1"><strong><h1><? echo $rows['topic']; ?></h1></strong></td>
</tr>

<tr>
  <td bgcolor="#F8F7F1" ><t><? echo nl2br( htmlentities ($rows['detail'], ENT_QUOTES, "UTF-8")); ?></t></td>
</tr>

<tr>
<td bgcolor="#F8F7F1"><strong>By :</strong> <? echo $rows['name']; ?></td>
</tr>

<tr>
<td bgcolor="#F8F7F1"><strong>Date/time : </strong><? echo $rows['datetime']; ?></td>
</tr>
</table></td>
</tr>
</table>
<BR>

<?php

$tbl_name2="forum_answer"; // Switch to table "forum_answer"
$sql2="SELECT * FROM $tbl_name2 WHERE question_id='$id'";
$result2=mysql_query($sql2);
while($rows=mysql_fetch_array($result2)){
?>

<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td width="18%" bgcolor="#F8F7F1"><strong>Name</strong></td>
<td width="5%" bgcolor="#F8F7F1">:</td>
<td width="77%" bgcolor="#F8F7F1"><? echo $rows['a_name']; ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><strong>Answer</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><? echo $rows['a_answer']; ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><strong>Date/Time</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><? echo $rows['a_datetime']; ?></td>
</tr>
</table></td>
</tr>
</table><br>

<?php
}

$sql3="SELECT view FROM $tbl_name WHERE id='$id'";
$result3=mysql_query($sql3);
$rows=mysql_fetch_array($result3);
$view=$rows['view'];

// if have no counter value set counter = 1
if(empty($view)){
$view=1;
$sql4="INSERT INTO $tbl_name(view) VALUES('$view') WHERE id='$id'";
$result4=mysql_query($sql4);
}

// count more value
$addview=$view+1;
$sql5="update $tbl_name set view='$addview' WHERE id='$id'";
$result5=mysql_query($sql5);
mysql_close();
?>

<BR>
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form name="form1" method="post" action="add_answer.php">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td width="18%"><strong>Username</strong></td>
<td width="3%">:</td>
<td width="79%"><input name="a_name" type="text" id="a_name" size="45" value="<?php echo $uname; ?>" readonly></td>
</tr>
<tr>
<td valign="top"><strong>Answer</strong></td>
<td valign="top">:</td>
<td><textarea name="a_answer" cols="45" rows="3" id="a_answer"></textarea></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input name="id" type="hidden" value="<? echo $id; ?>"></td>
<td><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</td>
</form>
</tr>
</table>

因为我是初学者,所以你能给予的任何建议都会非常感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

你可以做的是,创建一个存储整数(12或13位数字)的列,然后存储当有人提交帖子时从PHP中的microtime()函数获得的值。因此,当您想要显示时间时,只需从数据库中获取该值,然后存储在变量中,例如。 $time_of_post - 并执行以下操作:

echo "POSTED: ".date("H:i:s",microtime()-$time_of_post)." ago.";

当从当前微缩时间提交帖子时,这将减去微量时间,将其转换为hours:minutes:seconds并显示它。

答案 1 :(得分:0)

您可以为一个日期添加时间

$date= date('Y-m-j');
$newDate= strtotime ( '+1 hour' , strtotime ( $date) ) ;
$newDate= strtotime ( '+13 minute' , strtotime ( $date) ) ;
$newDate= strtotime ( '+30 second' , strtotime ( $date) ) ;
$newDate= date ( 'Y-m-j' , $newDate);
echo $newDate;

如果你使用循环,你可以实现一些目标。

这里如何计算出生日期的年龄,你可以调整这段代码

function CalculateAge($date){
    $days= explode("-", $date, 3);
    $days= mktime(0,0,0,$days[1],$days[0],$days[2]);
    $age= (int)((time()-$days)/31556926 );
    return $age;
}
//dd-mm-yy
echo CalculateAge("01-10-1989"); // result: 21