“上次登录:” - 登录时间超过一天前打印“天”

时间:2012-01-23 14:46:39

标签: php codeigniter time login

我们基于CodeIgniter的网站有一个部分显示用户上次登录的时间(必要时使用天数和小时,分钟,秒)。我试图在结果为1天时打印“日”,在超过1天时打印“天”。目前,1天显示为1 day,但2天(及以上)显示为2 day 2 days。你能看到我在这里做错了什么并修改代码吗?

$dDf =天

$hDf =小时

$mDf =分钟

$sDf =第二

<?php
    if ($dDf < 1) {
        if ($hDf > 0) {
            if ($mDf < 0) {
                $mDf = 60 + $mDf;
                $hDf = $hDf - 1;
                echo $mDf . ' min';
            } else {
                echo $hDf . ' hr ' . $mDf . ' min';
            }
        } else {
            if ($mDf > 0) {
                echo $mDf . ' min ' . $sDf . ' sec';
            } else {
                echo $sDf . ' sec';
            }
        }
    } else {
        echo $dDf . ' days ';

        if ($dDf > 1) {
            if ($hDf > 0) {
                if ($mDf < 0) {
                    $mDf = 60 + $mDf;
                    $hDf = $hDf - 1;
                    echo $mDf . ' min';
                } else {
                    echo $hDf . ' hr ' . $mDf . ' min';
                }
            } else {
                if ($mDf > 0) {
                    echo $mDf . ' min ' . $sDf . ' sec';
                } else {
                    echo $sDf . ' sec';
                }
            }
        } else {
            echo $dDf . ' day ';

            if ($hDf > 0) {
                if ($mDf < 0) {
                    $mDf = 60 + $mDf;
                    $hDf = $hDf - 1;
                    echo $mDf . ' min';
                } else {
                    echo $hDf . ' hr ' . $mDf . ' min';
                }
            } else {
                if ($mDf > 0) {
                    echo $mDf . ' min ' . $sDf . ' sec';
                } else {
                    echo $sDf . ' sec';
                }
            }
        }


    }
?>

3 个答案:

答案 0 :(得分:2)

我打算写一些东西,但是持续时间不超过60秒的非常简单的谷歌搜索提出了 THIS ,所以你有它。里面的代码:

/**
 * A function for making time periods readable
 *
 * @author      Aidan Lister <aidan@php.net>
 * @version     2.0.1
 * @link        http://aidanlister.com/2004/04/making-time-periods-readable/
 * @param       int     number of seconds elapsed
 * @param       string  which time periods to display
 * @param       bool    whether to show zero time periods
 */
function time_duration($seconds, $use = null, $zeros = false)
{
    // Define time periods
    $periods = array (
        'years'     => 31556926,
        'Months'    => 2629743,
        'weeks'     => 604800,
        'days'      => 86400,
        'hours'     => 3600,
        'minutes'   => 60,
        'seconds'   => 1
        );

    // Break into periods
    $seconds = (float) $seconds;
    $segments = array();
    foreach ($periods as $period => $value) {
        if ($use && strpos($use, $period[0]) === false) {
            continue;
        }
        $count = floor($seconds / $value);
        if ($count == 0 && !$zeros) {
            continue;
        }
        $segments[strtolower($period)] = $count;
        $seconds = $seconds % $value;
    }

    // Build the string
    $string = array();
    foreach ($segments as $key => $value) {
        $segment_name = substr($key, 0, -1);
        $segment = $value . ' ' . $segment_name;
        if ($value != 1) {
            $segment .= 's';
        }
        $string[] = $segment;
    }

    return implode(', ', $string);
}

答案 1 :(得分:1)

您是否有理由不想使用内置timespan()功能?

<?php
$this->load->helper('date');
echo timespan($last_logged_in_timestamp);

答案 2 :(得分:0)

我的代码库中有old example。它应该让你知道如何做到这一点。

function time_readable($duration) {
    $days = floor($duration/86400);
    $hrs = floor(($duration - $days * 86400) / 3600);
    $min = floor(($duration - $days * 86400 - $hrs * 3600) / 60);
    $s = $duration - $days * 86400 - $hrs * 3600 - $min * 60;

    $return = ($days > 0) ? $days . ' d ' : '';
    $return .= ($days > 0 || $hrs > 0) ? $hrs . ' hours ' : '';
    $return .= ($days > 0 || $hrs > 0 || $min > 0) ? $min . ' min ' : '';
    $return .= ($days > 0 || $hrs > 0 || $min > 0) ? $s . ' s ' : '';

    return $return;
}
相关问题