1

我正在创建存储在 MySQL 数据库中的评论。

在发布评论时,我正在记录 php 时间函数time()。这样它会显示一条消息,例如......“评论...... 4 秒前发布”,如果我在 2 分钟后刷新页面,它会显示“评论...... 2 分钟前发布”

这是我time()与其他数据一起输入数据库的方式:

$date=time();

// Insert data into mysql
$sql="INSERT INTO testimonials (username, comment, date) 
  VALUES ('$username', '$comment', '$date')";

现在......我抓取这样的数据:

while ($row = mysql_fetch_row($result) )
{
  echo "<b>Random Comment</b></br>";
  echo ("<p>\n> $row[1]"); //comment
  echo ("</br>-$row[0]</p>"); //name
  echo ("</br>$row[2]"); //date

我的服务器上的示例输出是:

随机评论

这是有史以来最棒的评论!!!!

-凯尔

1278905319

如何将时间“1278905319”转换为可读格式,例如“4 秒前发布”或处理秒、分钟、小时、天、周、月、年的内容?

PHP是错误的方法吗?我阅读了有关 MySQL 时间戳的信息,但我不明白这一点或如何使它在我的情况下工作。

所以我的主要问题是,如何将时间格式化为输出的可读时间。“2 秒前”

谢谢你。=)

4

3 回答 3

1

首先,让 MySQL 使用自动更新时间戳字段为您插入日期:

CREATE TABLE `table_a` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(255),
  `comment` TEXT,
  `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

这样,您不必担心从 PHP 代码中插入日期,并且如果您从其他地方进行任何测试 - 例如,从 MySQL 客户端,日期仍将正确插入。

您还应该使用PHP DateTime 类(需要 PHP 5.3.0 或更高版本),因为它使处理日期和时间变得非常简单。这是从数据库中获取一些信息并返回格式化时间间隔的示例:

$result = $mysqli->query(
    'SELECT ' .
    '`id`, ' .
    '`username`, ' .
    '`comment`, ' .
    '`date`, ' .
    'NOW(), ' .
    'FROM table');

$row = $result->fetch_assoc();

print_r($row);
Array
(
    [id] => 1
    [username] = 'Fred'
    [comment] = 'My first post'
    [date] => 2009-09-28 07:08:12
    [now] => 2010-07-12 08:47:03
)

$now = new DateTime($row['now']);
$post = new DateTime($row['date']);
$interval = $post->diff($now);
echo $interval->format('%m months, %d days, %d days, %h hours, %m minutes, %s seconds');

// 9 months, 14 days, 14 days, 1 hours, 9 minutes, 51 seconds

您可以使用DateInterval::format参数随意格式化间隔。通过让 MySQL 返回NOW(),您可以确保避免应用程序服务器(运行 PHP 的服务器)和数据库服务器之间的任何时间差异。

于 2010-07-12T07:45:17.447 回答
0

这是我在这里找到的一个函数,由 John McClumpha 编写:

<?php
function RelativeTime($timestamp){
    $difference = time() - $timestamp;
    $periods = array("sec", "min", "hour", "day", "week", "month", "years", "decade");
    $lengths = array("60","60","24","7","4.35","12","10");

    if ($difference > 0) { // this was in the past
        $ending = "ago";
    } else { // this was in the future
        $difference = -$difference;
        $ending = "to go";
    }       
    for($j = 0; $difference >= $lengths[$j]; $j++) $difference /= $lengths[$j];
    $difference = round($difference);
    if($difference != 1) $periods[$j].= "s";
    $text = "$difference $periods[$j] $ending";
    return $text;
}
于 2010-07-12T07:27:54.743 回答
0

如果您需要复杂的时间计算,请查看 symfony 的 DateHelper,尤其distance_of_time_in_words是在源代码中找到的。这是一个非常强大的方法,确实知道非常细粒度的时间计算(例如 5 秒前、20 秒前、大约 1 分钟前、10 分钟前……)


如果您只想格式化日期,可以通过 MySQL 对其进行格式化:

SELECT your_fields, FROM_UNIXTIME(date, 'H:%i:%s') FROM table;

例如,会给你 12:24:59。

于 2010-07-12T07:31:51.320 回答