【发布时间】:2011-02-23 07:32:40
【问题描述】:
我的问题是,我们如何使用 PHP 拥有一个自动化系统,它可以做到这一点:
如果我们有 $seconds= 120; 并且脚本应该得到这个值,看到这等于 2 分钟,然后以 分钟 打印这个值。就像我们想要几天一样,假设$days = 7; 脚本需要获取这个值,检查天数,在这种情况下它需要打印 1 周。谢谢各位!
【问题讨论】:
我的问题是,我们如何使用 PHP 拥有一个自动化系统,它可以做到这一点:
如果我们有 $seconds= 120; 并且脚本应该得到这个值,看到这等于 2 分钟,然后以 分钟 打印这个值。就像我们想要几天一样,假设$days = 7; 脚本需要获取这个值,检查天数,在这种情况下它需要打印 1 周。谢谢各位!
【问题讨论】:
<?php
/**
* @param int $secs
*
* @return string
*/
function formatSeconds($secs) {
$secs = (int)$secs;
if ( $secs === 0 ) {
return '0 secs';
}
// variables for holding values
$mins = 0;
$hours = 0;
$days = 0;
$weeks = 0;
// calculations
if ( $secs >= 60 ) {
$mins = (int)($secs / 60);
$secs = $secs % 60;
}
if ( $mins >= 60 ) {
$hours = (int)($mins / 60);
$mins = $mins % 60;
}
if ( $hours >= 24 ) {
$days = (int)($hours / 24);
$hours = $hours % 60;
}
if ( $days >= 7 ) {
$weeks = (int)($days / 7);
$days = $days % 7;
}
// format result
$result = '';
if ( $weeks ) {
$result .= "{$weeks} week(s) ";
}
if ( $days ) {
$result .= "{$days} day(s) ";
}
if ( $hours ) {
$result .= "{$hours} hour(s) ";
}
if ( $mins ) {
$result .= "{$mins} min(s) ";
}
if ( $secs ) {
$result .= "{$secs} sec(s) ";
}
$result = rtrim($result);
return $result;
}
echo formatSeconds(0), "\n";
echo formatSeconds(30), "\n";
echo formatSeconds(300), "\n";
echo formatSeconds(3000), "\n";
echo formatSeconds(30000), "\n";
echo formatSeconds(300000), "\n";
echo formatSeconds(3000000), "\n";
echo formatSeconds(30000000), "\n";
输出:
0 secs
30 sec(s)
5 min(s)
50 min(s)
8 hour(s) 20 min(s)
3 day(s) 23 hour(s) 20 min(s)
4 week(s) 6 day(s) 53 hour(s) 20 min(s)
49 week(s) 4 day(s) 53 hour(s) 20 min(s)
【讨论】:
0 secs 英文不太好 ;)
s 秒。否则,我赞成你的回答,因为它很好。
53 hour (s)。
4 周 6 天 53 小时 20 分钟
53 小时? 另外,300000 秒是 3 天 11 小时,而不是 3 天 23 小时
function formatSeconds($secs) {
if (!$secs = (int)$secs)
return '0 seconds';
$units = array(
'week' => 604800,
'day' => 86400,
'hour' => 3600,
'minute' => 60,
'second' => 1
);
$strs = array();
foreach($units as $name=>$int){
if($secs < $int)
continue;
$num = (int) ($secs / $int);
$secs = $secs % $int;
$strs[] = "$num $name".(($num == 1) ? '' : 's');
}
return implode(', ', $strs);
}
var_dump(formatSeconds(0));
var_dump(formatSeconds(30));
var_dump(formatSeconds(300));
var_dump(formatSeconds(3000));
var_dump(formatSeconds(30000));
var_dump(formatSeconds(300000));
var_dump(formatSeconds(3000000));
var_dump(formatSeconds(30000000));
string(9) "0 seconds"
string(10) "30 seconds"
string(9) "5 minutes"
string(10) "50 minutes"
string(19) "8 hours, 20 minutes"
string(28) "3 days, 11 hours, 20 minutes"
string(37) "4 weeks, 6 days, 17 hours, 20 minutes"
string(37) "49 weeks, 4 days, 5 hours, 20 minutes"
【讨论】:
你可以使用如下简单的东西:
$seconds = 120;
$minutes = floor($seconds/60);
echo $minutes.' min';
我不确定我是否正确理解了您的问题。
【讨论】: