【问题标题】:PHP, calculate time since addedPHP,计算自添加以来的时间
【发布时间】:2013-02-22 02:55:44
【问题描述】:

我有这个函数可以计算自从将一行添加到数据库中所经过的时间:

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 小时后的错误。 在当前时间调用时,它返回如下:7 小时前添加。 函数调用如下:

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

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

谢谢你

【问题讨论】:

  • 那么,您的问题是什么?这不准确吗?时区是否相同?
  • 为什么会出现 7 小时错误?
  • 你确定$time是一个时间戳并且它们在同一个时区吗?
  • $time 是一个时间戳。对于时区,似乎是一样的;如果我现在添加一行,时间戳就是我在本地机器上的时间。我正在本地机器(服务器)上测试这个

标签: php mysql database


【解决方案1】:

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

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

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

-- 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';

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 2012-01-03
    • 2012-11-03
    • 1970-01-01
    相关资源
    最近更新 更多