将秒转换为分钟:秒的PHP代码

5
我使用这个函数将秒转换为分钟:
function convert($iSeconds)
{
    return date('i:s', mktime(0, 0, $iSeconds));
}

它运行得很好。但是如果我使用这段代码:

echo convert(3605);

它返回 00:05。但我需要返回像这样的格式:60:05 如何格式化 分钟:秒钟

我非常确定,如果您将格式更改为“H:i:s”,它将变成“1:00:05”。我认为您必须手动将小时转换为分钟,而不使用日期函数。例如,如果您给出的是“7210”呢? - roullie
convert(3605); 这里插入的是毫秒而不是秒,如果你尝试 convert(600500); 那么你会看到。 - Harish Kumar
3个回答

4

你不能使用mktime()strtotime()来进行这种类型的转换。你需要手动计算。你可以尝试这样做 -

function convert($iSeconds)
{
   $min = intval($iSeconds / 60);
   return $min . ':' . str_pad(($iSeconds % 60), 2, '0', STR_PAD_LEFT);
}


echo convert(7205);

输出

120:05

Fiddle


正确答案。+1 - Alive to die - Anant

1

您不能使用日期转换函数,因为它无法接受超过 60 分钟和超过 24 小时的时间。

最简单的方法是使用此函数:

function convert($iSeconds)
{
    $numMinutes = $iSeconds/60;
    $numSeconds = $iSeconds - ($numMinutes * 60);
    $numMinutes = $numMinutes."";
    $numSeconds = $numSeconds."";
    if (strlen($numMinutes) == 1)
        $numMinutes = "0".$numMinutes;
    if (strlen($numSeconds) == 1)
        $numSeconds = "0".$numSeconds;
    return $numMinutes.":".$numSeconds;
}

1
根据mktime的文档,对于minute

相对于小时开始的分钟数。负值引用前一个小时的分钟数。大于59的值引用后续小时中适当的分钟数。

对于second

相对于分钟开始的秒数。负值引用前一分钟的秒数。大于59的值引用后续分钟中适当的秒数。

当您调用mktime时,您为小时和分钟都传递了0的值;使用3605秒,您基本上是在时钟上“旋转”3600/60次seconds指针,然后再添加这些5秒。

因此,您将需要首先手动计算给定秒数所对应的正确分钟值和可能的小时值。

为此,您将需要使用除法的modintval

以非常教育性的格式,您可以得到以下内容:

function convert($iSeconds) {
  $seconds = $iSeconds % 60;
  $minutes = intval($iSeconds/60);
  $hours = intval($minutes/60);
  $minutes = $minutes % 60;

  return date('H:i:s', mktime($hours, $minutes, $seconds));
}

https://eval.in/508531

实际上,这并不能直接解决原帖中的问题,因为分钟数可以是任意大小。正如注意到的那样,mktime无法用来实现此功能,因为它总是格式化一个“正确”的时间值,其中分钟和秒钟都是0到59之间的数字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接