我们基于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';
}
}
}
}
?>
答案 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;
}