Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP date()小时、分钟和秒,不带前导零_Php_Date_Time - Fatal编程技术网

PHP date()小时、分钟和秒,不带前导零

PHP date()小时、分钟和秒,不带前导零,php,date,time,Php,Date,Time,可能重复: 我一直在互联网上寻找把秒转换成分钟的好方法:没有前导零的秒。我已经查过了,这是我唯一能找到的答案,但是这些答案都不是很好。也许这是实现这一目标的唯一和最好的办法,但我希望不是 我已经这样做了,它给了我没有前导零的分钟数,但是我无法得到秒数。我能想到的唯一方法就是做几行数学之类的,但对于像这样简单的事情来说,这似乎是一个非常多的工作。。。我不知道为什么PHP在几分钟和几秒钟内都没有内置它 intval(gmdate("i:s", $duration)); 编辑 我所要做的就是将视频

可能重复:

我一直在互联网上寻找把秒转换成分钟的好方法:没有前导零的秒。我已经查过了,这是我唯一能找到的答案,但是这些答案都不是很好。也许这是实现这一目标的唯一和最好的办法,但我希望不是

我已经这样做了,它给了我没有前导零的分钟数,但是我无法得到秒数。我能想到的唯一方法就是做几行数学之类的,但对于像这样简单的事情来说,这似乎是一个非常多的工作。。。我不知道为什么PHP在几分钟和几秒钟内都没有内置它

intval(gmdate("i:s", $duration));
编辑
我所要做的就是将视频中的秒数转换为H:M:S格式。

gmdate将时间戳作为第二个参数。 你应该这样做:

echo gmdate("H:i:s", mktime(0, 0, 0, 1, 1, 1998) + $duration);
intval不应该在那里,因为您将获得一个字符串并再次将其转换为int。使用H:i:s,您有10:40:05。
但是,如果持续时间>然后是24小时,则此操作将不起作用

implode(
    ':',
    array_map(
        function($i) { return intval($i, 10); },
        explode(':', gmdate('H:i:s', $duration))
    )
)
但是,如果hour==0,则不打印0:而只打印m:s


我会反复地写它:

function duration_to_timestring($duration)
{
        $s = [];
        if ($duration > 3600) {
                $s[] = floor($duration / 3600);
                $duration %= 3600;
        }
        $s[] = floor($duration / 60);
        $s[] = floor($duration % 60);

        return join(':', $s);
}

您需要
intval()
做什么?你为什么要加上它?好吧,这是我问题中另一个溢出问题的答案之一,它删除了零,以及其他所有东西..不,它没有。在随机应用函数之前,请阅读文档:正如我所说,我自己并没有应用它,这是关于这个唯一主题的少数几个答案之一,如果我没有弄错的话,有几次这样建议。此外,我只是说明它对我的约会做了什么,它确实删除了零和非数值。“就像我说的,我自己没有应用它,这是唯一主题上为数不多的答案之一”——甚至更糟。这是一个程序员社区,而不是代码复制粘贴程序。我想删除前导零,但上面的代码没有。如果不想使用前导0,则必须使用$hours=date(“h”,mktime(0,0,0,1,1,1998)+$duration)$分钟=intval(日期(“i”),mktime(0,0,0,1,11998)+持续时间)$秒=intval(日期(“s”),mktime(0,0,0,1,11998)+$duration);我编辑了我的代码,我觉得你应该使用日期而不是gmdate。否则,现在可能不准确,具体取决于服务器日期。谢谢,唯一的问题是,1小时(本应为零)现在是12小时,但在您编辑它之前,它是5小时。您是对的,它应该是$hours=date(“G”,mktime(0,0,0,1,1,1998)+$duration);很好地完成了1行中的所有内容:)。谢谢,这确实达到了预期的效果。我没有问这个问题,但是如果hour==0,那么就不打印0:而只打印m:s@Dylan克罗斯:所有持续时间<86400秒,请参见版本2:)实际上。。。我现在觉得自己非常愚蠢,我真的需要做的就是这么做。后来我意识到,实际上我根本不想删除秒中的前导零<代码>预替换(“^00:0~”,“,gmdate”(“H:i:s,$duration))这也很好,尽管我仍然不明白为什么php不包含没有前导零的分和秒。@DylanCross只有特权者知道为什么,也许他们没有可用的字母作为格式说明符;-)
function duration_to_timestring($duration)
{
        $s = [];
        if ($duration > 3600) {
                $s[] = floor($duration / 3600);
                $duration %= 3600;
        }
        $s[] = floor($duration / 60);
        $s[] = floor($duration % 60);

        return join(':', $s);
}