PHP,计算自添加以来的时间

标签 php mysql database

我有一个函数可以计算自将一行添加到数据库以来耗时:

function added_on($time){
    $now = time();
    $time = $now - $time; 

    $blocks = array (
        31536000 => 'year',
        2592000 => 'month',
        604800 => 'week',
        86400 => 'day',
        3600 => 'hour',
        60 => 'minute',
        1 => 'second'
    );

    foreach ($blocks as $unit => $size) {
        if ($time < $unit) 
            continue;

        $nrOfUnits = floor($time / $unit);
        return $nrOfUnits.' '.$size.(($nrOfUnits>1)?'s':'');
    }

}

问题是不准确,即误差大约落后 7 小时。 当在当前时间调用时,它返回如下:added 7 小时前。 函数调用如下:

$posted_on = strtotime($row['created_at']);
echo 'added '.added_on($posted_on).' ago';

其中$row['created_at']是MySQL日期类型

谢谢

最佳答案

乍一看,我猜测是不同的时区。在纯 MySql 中完成相同任务的不同方法如下:

select time_to_sec(timediff(now(), created_at)) as seconds_ago from `table_name`

为了帮助您进行更多调试,您可以使用以下命令检查和设置 mysql 服务器的时区( docs ):

-- Check the global and session time_zone settings
select @@global.time_zone, @@session.time_zone;

-- Set the time zone to GMT -5 hours (EST):
set SESSION time_zone = '-5:00';

关于PHP,计算自添加以来的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15016087/

相关文章:

java - Sqlite 语法错误

PHP $_GET 有效,但 $_POST 回显空白

php - 在查询中定义一个变量然后在同一个查询中使用它?

MySQL:使用唯一标识符将数据从一个表 move 到另一个表

php - 做一个临时记录,24 小时后自动删除?

iphone - 将完整的类对象存储到 iPhone 中的数据库中

php - 如何在 php 中将日期和时间转换为 unix 时间戳?

php - 使用 DOMDocument 创建复杂结构

ASP.NET MySQL更新多条记录

python - 如何使用 Python 将带有引号和换行符的字符串插入到 sqlite 数据库中?