Time Ago 函数未返回正确的值

Time Ago function not returning correct value

我在执行 TIME AGO 日期时遇到了问题。我的代码要么显示“2 年前”...如果我尝试从我的数据库中添加时间戳,它会抛出“46 年前。我真的迷失在这里。我一直在使用 "new DateTime();", time(), date(), 没有任何工作。任何一个字符串都应该是对象,不正确的变量,等等......。 这是代码...

<?php
function timeAgo($time_ago){
$cur_time   = time();
$time_elapsed   = $cur_time - $time_ago;
$seconds    = $time_elapsed ;
$minutes    = round($time_elapsed / 60 );
$hours      = round($time_elapsed / 3600);
$days       = round($time_elapsed / 86400 );
$weeks      = round($time_elapsed / 604800);
$months     = round($time_elapsed / 2600640 );
$years      = round($time_elapsed / 31207680 );
// Seconds
if($seconds <= 60){
    echo "$seconds seconds ago";
}
//Minutes
else if($minutes <=60){
    if($minutes==1){
        echo "one minute ago";
    }
    else{
        echo "$minutes minutes ago";
    }
}
//Hours
else if($hours <=24){
    if($hours==1){
        echo "an hour ago";
    }else{
        echo "$hours hours ago";
    }
}
//Days
else if($days <= 7){
    if($days==1){
        echo "yesterday";
    }else{
        echo "$days days ago";
    }
}
//Weeks
else if($weeks <= 4.3){
    if($weeks==1){
        echo "a week ago";
    }else{
        echo "$weeks weeks ago";
    }
}
//Months
else if($months <=12){
    if($months==1){
        echo "a month ago";
    }else{
        echo "$months months ago";
    }
}
//Years
else{
    if($years==1){
        echo "one year ago";
    }else{
        echo "$years years ago";
    }
}
}

?>

来电是...

<?php
  $curenttime="2013-07-10 09:09:09";
  $time_ago =strtotime($curenttime);
  echo timeAgo($time_ago);
?>

我的 SQL 时间戳字符串是 $r->time

任何帮助都是有用的。该代码将在 http://autodude666.com/network 的无线电请求页面中使用。 非常感谢提前

数据库查询...

<?php
//error_reporting(0);
require '../db/connect_guest.php';
require '../db/security.php';


$records = array();

if($results = $db->query("SELECT * FROM guests ORDER BY id DESC")){

    if($results->num_rows){
        while($row = $results->fetch_object()){
            $records[] = $row;

        }

        $results->free();
    }
}

echo '<pre>', print_r($records), '</pre>';


?>

数据库插入是....

if(!empty($_POST)){
    if(isset($_POST['name'], $_POST['email'], $_POST['message'])){

        $name       = trim($_POST['name']);
        $email      = trim($_POST['email']);
        $message    = trim($_POST['message']);

        $time       = date("g:i A");
        $date       = date("Y-m-d H:i:s");
        $ip         = $_SERVER['REMOTE_ADDR'];  


        if(!empty($name) && !empty($message)){
            $insert = $db->prepare("INSERT INTO guests (name, email, message, date, time, ip) VALUES (?, ?, ?, ?, ?, ?)");
            $insert->bind_param('ssssss', $name, $email, $message, $time, $date, $ip);

            if($insert->execute()){
                header('location: index_input.php');
                die();
            }
        }

    }
}

您需要使用 intval() 而不是 round() 更改:

$minutes    = round($time_elapsed / 60 );
$hours      = round($time_elapsed / 3600);
$days       = round($time_elapsed / 86400 );
$weeks      = round($time_elapsed / 604800);
$months     = round($time_elapsed / 2600640 );
$years      = round($time_elapsed / 31207680 );

$minutes    = intval($time_elapsed / 60 );
$hours      = intval($time_elapsed / 3600);
$days       = intval($time_elapsed / 86400 );
$weeks      = intval($time_elapsed / 604800);
$months     = intval($time_elapsed / 2600640 );
$years      = intval($time_elapsed / 31207680 );
<?php
function timeAgo($time_ago){
    $cur_time   = new DateTime("now");
    $time_ago = new DateTime($time_ago);


    $time_elapsed   = $cur_time->diff($time_ago, true);

    $seconds    = $time_elapsed->s;
    $minutes    = $time_elapsed->i;
    $hours      = $time_elapsed->h;
    $days       = $time_elapsed->d;
    // $weeks      =  diff function doesn't give weeks in the object.
    $months     = $time_elapsed->m;
    $years      = $time_elapsed->y


    echo $years." years, ".$months." months, ".$days." days and ".$hours." hours ".$minutes." minutes and ".$seconds." seconds ago.";

}

?>

然后从那里开始玩...

一些其他的旁注:

在您的数据库中插入了 if(isset($_POST['name'], $_POST['email'], $_POST['message']))

Post 将发送一个空字段(即如果他们不填写姓名或电子邮件)作为空白字符串,isset 将评估为真(它被设置为空白字符串。)那意味着这些将永远是真的,所以这是一个毫无价值的测试。改用空的。

if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message'])) {

您还可以使用时间戳将数据库 table 列的时间和日期合并为一个列,然后在每次提取时将其转换为您想要的任何格式。

我想您需要添加 date_default_timezone_set('TimeZone here'); 以便 return 正确的日期。