0

所以,我得到了这个工作代码,它将 MySQL 日期转换为 UNIX 时间戳,并从当前 date() 中减去它以显示“自 X 以来经过的时间”类似计时器。(从数据库中获取日期的部分丢失了,因为它在另一个脚本中)

    <?php 
    function time_elapsed($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);
        }

    $nowtime = time() + 10; //add 10s to avoid error
    $oldtime = strtotime($mysqltime2);

    $time_elapsed = time_elapsed($nowtime-$oldtime)."\n";
    echo wordwrap($time_elapsed,35,"<br />\n"); //split long line
    ?>

如果脚本在 MySQL 日期的同一时间执行,我设法通过在当前时间戳上增加 10 秒来修复错误报告缺失数组或其他问题。

我遇到的另一个问题是脚本显示“和 X 秒”,即使它之前没有分钟/小时/天/等。例如“ X 秒”“Y 分X秒”“Z 小时 Y 分X秒”“N 天 Z 小时 Y 分X

只有在它之前没有分钟/小时/等时,我才想在秒之前删除“和”。

有关如何解决此问题的任何提示?

4

3 回答 3

0

您只能在需要时拼接:

if( count($ret) > 1 ) {
    array_splice($ret, count($ret)-1, 0, 'and');
}
于 2014-11-14T11:54:25.527 回答
0

我能想到的最简单的是

$time_elapsed = time_elapsed($nowtime-$oldtime))."\n";
if($nowtime-$oldtime < 61){
  $time_elapsed=str_replace('and ',' ',$time_elapsed);
}
于 2014-11-14T11:50:02.527 回答
0

不确定这是否会有所帮助,但为什么不在 mysql 中做大部分日期数学呢?

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

这是我之前在网站评论部分列出帖子时所做的事情,它输出“2小时前发布的帖子”等

SQL:

UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(made_on)  as madeon 

PHP(将 makeon 从查询传递到此处):

function seconds_to_textual_time_ago($seconds)
    {
    $hour = 60* 60;
    $day = 24 * $hour;
    $month = 30 * $day;
    $year = 365 * $day;

    switch(true) 
        {
        case ($seconds < 60) :
            $time_ago = "Less than 1 minute ago";
            break;

        case ($seconds >= 60 && $seconds < $hour):
            $minutes = floor($seconds /60);
            if ($minutes > 1) 
                $time_ago = "$minutes minutes ago";
            else
                $time_ago = "1 minute ago";
            break;



        case ($seconds >= $hour && $seconds < $day):
            $hours = floor($seconds /$hour);
            if ($hours > 1) 
                $time_ago = "$hours hours ago";
            else
                $time_ago = "1 hour ago";
            break;


        case ($seconds >= $day && $seconds < $month):
            $days = floor($seconds /$day);
            if ($days > 1) 
                $time_ago = "$days days ago";
            else
                $time_ago = "1 day ago";
            break;


        case ($seconds >= $month && $seconds < $year):
            $months = floor($seconds /$month);
            if ($months > 1) 
                $time_ago = "$months months ago";
            else
                $time_ago = "1 month ago";
            break;

        case ($seconds >= $year ):
            $years = floor($seconds /$year);
            if ($years > 1) 
                $time_ago = "$years years ago";
            else
                $time_ago = "1 year ago";
            break;


        default:
            break;
        }
    return $time_ago;
    }
于 2014-11-14T11:56:32.387 回答