我需要将秒转换为“小时:分钟:秒”。

例如:“685”转换为“00:11:25”

我怎样才能做到这一点呢?


当前回答

仅当秒数小于86400(1天)时使用函数gmdate():

$seconds = 8525;
echo gmdate('H:i:s', $seconds);
# 02:22:05

参见: gmdate()

运行Demo


将秒转换为“脚”格式无限制*:

$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05

参见:floor(), sprintf(),算术运算符

运行Demo


DateTime扩展的示例使用:

$seconds = 8525;
$zero    = new DateTime("@0");
$offset  = new DateTime("@$seconds");
$diff    = $zero->diff($offset);
echo sprintf("%02d:%02d:%02d", $diff->days * 24 + $diff->h, $diff->i, $diff->s);
# 02:22:05

参见:DateTime::__construct(), DateTime::modify(), clone, sprintf ()

运行Demo


MySQL示例的结果范围被限制为TIME数据类型,从-838:59:59到838:59:59:

SELECT SEC_TO_TIME(8525);
# 02:22:05

看:SEC_TO_TIME

运行Demo


PostgreSQL的例子:

SELECT TO_CHAR('8525 second'::interval, 'HH24:MI:SS');
# 02:22:05

运行Demo

其他回答

如果你需要在javascript中做到这一点,你可以在这里回答的一行代码中做到这一点,用javascript将秒转换为HH-MM-SS。用您想要转换的内容替换SECONDS。

var time = new Date(SECONDS * 1000).toISOString().substr(11, 8);

这是一种很好的方法:

function time_converter($sec_time, $format='h:m:s'){
      $hour = intval($sec_time / 3600) >= 10 ? intval($sec_time / 3600) : '0'.intval($sec_time / 3600);
      $minute = intval(($sec_time % 3600) / 60) >= 10 ? intval(($sec_time % 3600) / 60) : '0'.intval(($sec_time % 3600) / 60);
      $sec = intval(($sec_time % 3600) % 60)  >= 10 ? intval(($sec_time % 3600) % 60) : '0'.intval(($sec_time % 3600) % 60);

      $format = str_replace('h', $hour, $format);
      $format = str_replace('m', $minute, $format);
      $format = str_replace('s', $sec, $format);

      return $format;
    }

一小时是3600秒,一分钟是60秒,为什么不呢?

<?php

$init = 685;
$hours = floor($init / 3600);
$minutes = floor(($init / 60) % 60);
$seconds = $init % 60;

echo "$hours:$minutes:$seconds";

?>

生产:

$ php file.php
0:11:25

(我没有测试这么多,所以地板可能会有错误)

在java中你可以使用这种方法。

   private String getHmaa(long seconds) {
    String string;
    int hours = (int) seconds / 3600;
    int remainder = (int) seconds - hours * 3600;
    int mins = remainder / 60;
    //remainder = remainder - mins * 60;
    //int secs = remainder;

    if (hours < 12 && hours > 0) {
        if (mins < 10) {
            string = String.valueOf((hours < 10 ? "0" + hours : hours) + ":" + (mins > 0 ? "0" + mins : "0") + " AM");
        } else {
            string = String.valueOf((hours < 10 ? "0" + hours : hours) + ":" + (mins > 0 ? mins : "0") + " AM");
        }
    } else if (hours >= 12) {
        if (mins < 10) {
            string = String.valueOf(((hours - 12) < 10 ? "0" + (hours - 12) : ((hours - 12) == 12 ? "0" : (hours - 12))) + ":" + (mins > 0 ? "0" + mins : "0") + ((hours - 12) == 12 ? " AM" : " PM"));
        } else {
            string = String.valueOf(((hours - 12) < 10 ? "0" + (hours - 12) : ((hours - 12) == 12 ? "0" : (hours - 12))) + ":" + (mins > 0 ? mins : "0") + ((hours - 12) == 12 ? " AM" : " PM"));
        }
    } else {
        if (mins < 10) {
            string = String.valueOf("0" + ":" + (mins > 0 ? "0" + mins : "0") + " AM");
        } else {
            string = String.valueOf("0" + ":" + (mins > 0 ? mins : "0") + " AM");
        }
    }
    return string;
}

仅当秒数小于86400(1天)时使用函数gmdate():

$seconds = 8525;
echo gmdate('H:i:s', $seconds);
# 02:22:05

参见: gmdate()

运行Demo


将秒转换为“脚”格式无限制*:

$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05

参见:floor(), sprintf(),算术运算符

运行Demo


DateTime扩展的示例使用:

$seconds = 8525;
$zero    = new DateTime("@0");
$offset  = new DateTime("@$seconds");
$diff    = $zero->diff($offset);
echo sprintf("%02d:%02d:%02d", $diff->days * 24 + $diff->h, $diff->i, $diff->s);
# 02:22:05

参见:DateTime::__construct(), DateTime::modify(), clone, sprintf ()

运行Demo


MySQL示例的结果范围被限制为TIME数据类型,从-838:59:59到838:59:59:

SELECT SEC_TO_TIME(8525);
# 02:22:05

看:SEC_TO_TIME

运行Demo


PostgreSQL的例子:

SELECT TO_CHAR('8525 second'::interval, 'HH24:MI:SS');
# 02:22:05

运行Demo