【问题标题】:Get hours between a unix time value and now获取 unix 时间值和现在之间的小时数
【发布时间】:2013-04-30 13:45:18
【问题描述】:

我正在使用 Highcharts 库创建一些漂亮的报告。

我有一组 unix 时间值,我需要将它们转换为该日期和“现在”之间的小时数。

series: [{
    name: 'Fecha/Hora de Acceso',
    // Outputs: 2382374734 (a unix time)
    data: [<?php foreach($tutores as $t) echo $t['lastlogin'] . ','; ?>]
}]

有没有使用 PHP 的简单方法来做到这一点?我正在寻找像34 这样的值。不是34 Hours

【问题讨论】:

    标签: php unix time hour


    【解决方案1】:

    使用 PHP time() 函数比较结果除以 3600 得到小时差

    http://www.php.net/manual/en/function.time.php

    <?php foreach($tutores as $t) {
        echo floor((time() - $t['lastlogin']) / 3600) . ',';
    } ?>
    

    编辑:更新为在示例中使用 floor()。也可以使用 round() 或其他任何东西来根据需要格式化结果

    【讨论】:

    • 这可行,但会返回很多小数位。我怎样才能让它返回34 而不是34.203611111
    • floor()round() 取决于您需要的舍入样式。
    【解决方案2】:

    应该这样做:

    $datetime1 = new DateTime();
    $datetime2 = new DateTime('@'.$t['lastlogin']);
    $interval = $datetime1->diff($datetime2);
    echo $interval->format('%h');
    

    【讨论】:

    • John 我有一个问题:你有没有在 txt 文件中准备好这段代码,只要你发现这样的问题就复制粘贴它?
    • 我实际上有一篇关于使用 DateTime 和我经常参考的相关类的未发表的博客文章。在某个时候,我会开始发布它。 :)
    • "未捕获的异常 'Exception' 带有消息 'DateTime::__construct(): 无法解析时间字符串 (2382374734)" 要将 UNIX 时间戳传递给 DateTime 构造函数,您必须在时间戳前面加上@ 签名。
    • 正确。我现在已经添加了。
    • diff 返回的 DateInterval 有不同的天数、小时数、分钟数等。所以小时数永远不会超过 24。你需要加上天数,乘以24(DST 除外)并添加小时数。或者你可以使用@Nealio 的代码。 :-)
    【解决方案3】:

    是的,你可以DateTime::diff(): http://php.net/datetime.diff

    $input = 2382374734;
    
    $old = new DateTime( '@' . $input );
    $diff = $old->diff( new DateTime() );
    
    echo sprintf( '%d is %d hours ago', $input, $diff->format( '%h' ) );
    

    【讨论】:

    • DateInterval 将差异存储为天数、小时数等。因此小时数不是总小时数,而是减去天数后剩余的小时数。见eval.in/18321
    猜你喜欢
    • 2012-12-09
    • 2015-09-11
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    相关资源
    最近更新 更多