自函数错误以来的PHP时间

时间:2016-02-25 18:25:48

标签: php mysql

我正在写一段时间,因为函数返回给定的mysql datetime以来的时间。当从当前时间()获取$ oldtime时,当我需要一个正int时,它返回一个负int。我以前在其他语言中写过类似的函数,但是我已经对这个问题视而不见了,所以任何帮助都会非常感激。

function timeSince($time){
        $today = date("Y");
        $oldtime = strtotime($time);
        $time = time() - $oldtime;
        $tokens = array (
            3600 => 'h',
            60 => 'm',
            1 => 's'
        );

        if($time >= 86400){
        }
    }

echo timeSince('2016-02-25 14:35:00');

3 个答案:

答案 0 :(得分:3)

如果您使用PHP的DateTimeDateInterval类及其方法,可能会更方便:

function timeSince($datetime) {
    $now        = strtotime("now");
    $then       = strtotime($datetime);
    $dt_now     = new DateTime("@" . $now);
    $dt_then    = new DateTime("@" . $then);

    //DateTime's diff method returns a DateInterval object which got a format method:
    return $dt_now->diff($dt_then)->format('%a days, %h hours, %i minutes and %s seconds');
}


一些测试用例:

//my local date & time is around "2016-02-25 19:49:00" when testing
echo '<pre>';

echo timeSince('2016-02-25 19:30:00');
//0 days, 0 hours, 19 minutes and 11 seconds
echo PHP_EOL;

echo timeSince('2013-11-02 15:43:12'); 
//845 days, 4 hours, 4 minutes and 3 seconds
echo PHP_EOL;

echo timeSince('2017-01-31 00:22:45'); 
//340 days, 4 hours, 35 minutes and 30 seconds
echo PHP_EOL;

echo timeSince('1950-05-14 07:10:05');
//24028 days, 12 hours, 37 minutes and 10 seconds
echo PHP_EOL;


代码部分基于此答案:https://stackoverflow.com/a/19680778/3391783

答案 1 :(得分:2)

strtotime在您的PHP设置中使用时区。根据时区设置,它可能会转换为尚未发生的时间。例如,在我的乌克兰服务器上,strtotime('2016-02-25 14:35:00')转换为1456403700,在另一个时区(美国/太平洋地区)的服务器上转换为1456439700

引用PHP文档:

  

该函数期望给出一个包含英文日期格式的字符串,并尝试将该格式解析为Unix时间戳(自1970年1月1日00:00:00 UTC以来的秒数),相对于给定的时间戳。现在,或者现在没有提供当前时间。

     

除非在该参数中指定了时区,否则此函数的每个参数都使用默认时区。除非是这样,否则请注意不要在每个参数中使用不同的时区。有关定义默认时区的各种方法,请参阅date_default_timezone_get()。

您可以将UTC / GMT偏移量添加到日期时间(第一个参数),例如strtotime('2016-02-25 14:35:00 +0800')('2016-02-25 14:35:00 GMT+08:00')将转换为1456382100

答案 2 :(得分:0)

在您的示例中,$oldtime必须小于当前time()的值。

所以,如果你想计算较大值之间的时间,只需颠倒你的等式:

这一行: $time = time() - $oldtime;

变为: $time = $oldtime - time();