使用php mysql数据库经过的时间

使用php mysql数据库经过的时间,php,mysql,Php,Mysql,我正在写我的评论页面,我有一个简单的问题。 如何将数据库结果更改为“[result x]天/月/年前”? 似乎是当前日期减去(-)后日期。但是,我怎样才能写得准确呢 谢谢你的帮助 这是我的密码 <?php $sql=mysql_query("SELECT * FROM reviews ORDER BY review_code DESC LIMIT 3"); while($db=mysql_fetch_array($sql)){ echo " <div style='padding-

我正在写我的评论页面,我有一个简单的问题。
如何将数据库结果更改为“[result x]天/月/年前”? 似乎是当前日期减去(-)后日期。但是,我怎样才能写得准确呢

谢谢你的帮助

这是我的密码

<?php
$sql=mysql_query("SELECT * FROM reviews ORDER BY review_code DESC LIMIT 3");
while($db=mysql_fetch_array($sql)){

echo "
<div style='padding-bottom: 25px;'>
Post Date: ".$db['post_date']." minus(-) Current Time: ".time()."
</div>
";}
?>
有人能帮我吗?请告诉我一个好消息。PHP已经有了这样的函数。time_exposed_B函数应该执行您想要的操作。这是一篇包含信息的文章。

编辑 不是内置的,而是链接提供的。
function time_elapsed_A($secs){
    $bit = array(
        'y' => $secs / 31556926 % 12,
        'w' => $secs / 604800 % 52,
        'd' => $secs / 86400 % 7,
        'h' => $secs / 3600 % 24,
        'm' => $secs / 60 % 60,
        's' => $secs % 60
    );

    foreach($bit as $k => $v)
        if($v > 0)$ret[] = $v . $k;

    return join(' ', $ret);
}


function time_elapsed_B($secs){
    $bit = array(
        ' year'        => $secs / 31556926 % 12,
        ' week'        => $secs / 604800 % 52,
        ' day'        => $secs / 86400 % 7,
        ' hour'        => $secs / 3600 % 24,
        ' minute'    => $secs / 60 % 60,
        ' second'    => $secs % 60
    );

    foreach($bit as $k => $v){
        if($v > 1)$ret[] = $v . $k . 's';
        if($v == 1)$ret[] = $v . $k;
    }
    array_splice($ret, count($ret)-1, 0, 'and');
    $ret[] = 'ago.';

    return join(' ', $ret);
}

没有内置的功能来执行此操作。您必须手动编写代码,找到现在和日期之间的差异,并将其转换为时间单位

然而,你不必在这里重新发明轮子。像这样的日期操纵库已经实现了这方面的功能。(查看
Moment::calendar()
方法)

查看这里:

基本上,您应该创建两个datetime对象并使用diff函数:

$datetime1 = new DateTime($db['post_date']); // Date post was created
$datetime2 = new DateTime(); // Default DateTime is now
$interval = $datetime1->diff($datetime2);
echo $interval->format('Post created %a days ago');


如果您想动态更改措辞(天、月、年等),请查看此评论:

以下功能由社区在提供。它返回人类可读的秒数表示形式。所以,用现在和你的约会之间的秒差来填充它

function time_elapsed_B($secs){
    $bit = array(
        ' year'        => $secs / 31556926 % 12,
        ' week'        => $secs / 604800 % 52,
        ' day'        => $secs / 86400 % 7,
        ' hour'        => $secs / 3600 % 24,
        ' minute'    => $secs / 60 % 60,
        ' second'    => $secs % 60
        );

    foreach($bit as $k => $v){
        if($v > 1)$ret[] = $v . $k . 's';
        if($v == 1)$ret[] = $v . $k;
        }
    array_splice($ret, count($ret)-1, 0, 'and');
    $ret[] = 'ago.';

    return join(' ', $ret);
}
示例用法:

$seconds = strtodate($db['post_date']);

echo time_elapsed_B(time() - $seconds);

你的意思是你有一个日期值,你想把它转换成“时间之前”的格式,类似于Stack Overflow列出问题/评论等的时间。?谷歌搜索“javascript time ago”之类的东西,你就可以开始了。有一些小型库可以为您转换显示值。是的。。我在javascript上实现了这个概念。它工作得很好,因为它不包含任何数据库。它的结果“很久以前”完全像我想要的。但是,在本例中,我使用的是php和数据库。这对我来说是一件新鲜事。我真的不明白怎么做。你的PHP代码没有输出到网页上吗?如果是这样(就像大多数PHP那样),那么您可以使用JavaScript库。输出显示正确的数据。你的意思是“$db['post_date']”可以用javascript转换吗?我的意思是javascript不关心数据来自哪里,它只会转换你给它的任何值。您可以对测试值进行硬编码,或从数据库中输出。对于JavaScript来说,这几乎是一样的。如果你要使用库,只需使用更流行和广泛使用的Carbon;)@Theomesin当然,这是另一条路。我总是更喜欢这个矩库,因为它本质上与JavaScript的对应项相同,而且我喜欢对称:)足够公平。我只是想发动一场解放战争因为我现在没有更好的事要做。。XDit工作正常,但当我将帖子数据库更改为2015年时,它显示“547天前创建的帖子”,如何将其转换为“几个月前”和“几年前”?还有一个问题,我们可以问“如果0天=今天”和“如果1天=昨天”吗?
$seconds = strtodate($db['post_date']);

echo time_elapsed_B(time() - $seconds);