【问题标题】:PHP date() Hours, Minutes and Seconds without leading zeros [duplicate]PHP date()小时,分钟和秒没有前导零[重复]
【发布时间】:2012-12-12 12:01:31
【问题描述】:

可能重复:
Convert seconds to Hour:Minute:Second

我一直在互联网上搜索,以找到一种将秒转换为分钟的好方法:没有前导零的秒。我已经查看了this question,这是我能找到的唯一一个,但是这些答案看起来都不是很好。也许它们是实现这一目标的唯一和最好的方法,但我希望不是。

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

intval(gmdate("i:s", $duration));

编辑 我要做的就是将视频中的秒数转换为 H:M:S 格式。

【问题讨论】:

  • 您需要intval() 做什么? 为什么你添加它?
  • 嗯,这是我的问题中另一个溢出问题的答案之一,它删除了零,以及其他所有内容..
  • 不,它没有。随机应用函数前请阅读文档:php.net/intval
  • 就像我说的,我自己并没有应用它,它是关于这个唯一主题的少数答案之一,如果我没记错的话,它被建议了几次.另外,我只是说明它对我的约会做了什么,它确实删除了零和非数值。
  • “就像我说的,我自己没有应用它,它是唯一主题的少数答案之一” --- 更糟。这是一个程序员社区,而不是代码复制粘贴者。

标签: php date time


【解决方案1】:
implode(
    ':',
    array_map(
        function($i) { return intval($i, 10); },
        explode(':', gmdate('H:i:s', $duration))
    )
)

但是如果 hour==0 那么不打印 0: 并且只有 m:s 会怎样

preg_replace(
    '~^0:~',
    '', 
    implode(
        ':',
        array_map(
            function($i) { return intval($i, 10); },
            explode(':', gmdate('H:i:s', $duration))
        )
    )
)

【讨论】:

  • 把所有东西都放在一行里做得很好:)。
  • 谢谢,这确实有预期的结果。我没有问这个,但是如果 hour==0 然后不打印 0: 而只有 m:s
  • @Dylan Cross:查看版本 2
  • 所有持续时间
  • 其实……我现在觉得自己太蠢了,我真正需要的就是这样做。后来我意识到我实际上根本不希望删除秒内的前导零。 preg_replace('~^00:0~','', gmdate("H:i:s", $duration));
【解决方案2】:

我只是迭代地写它:

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);
}

【讨论】:

  • 这也不错,虽然我还是不明白为什么 php 不包括没有前导零的分钟和秒。
  • @DylanCross 只有特权人才知道原因,也许他们用完了有用的字母来用作格式说明符 ;-)
【解决方案3】:

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

echo gmdate("H:i:s", mktime(0, 0, 0, 1, 1, 1998) + $duration);

intval 不应该在那里,因为您正在获取一个字符串并将其再次转换为 int。使用 H:i:s 你有 10:40:05。
但是,如果您的持续时间 > 然后 24 小时,这将不起作用。

【讨论】:

  • 我想删除前导零,但上面的代码没有。
  • 如果你想没有前导 0,那么你将不得不使用 $hours = date("h", mktime(0, 0, 0, 1, 1, 1998) + $duration); $minutes = intval(date("i", mktime(0, 0, 0, 1, 1, 1998) + $duration)); $seconds = intval(date("s", mktime(0, 0, 0, 1, 1, 1998) + $duration));
  • 我编辑了我的代码,我感觉你应该使用 date 而不是 gmdate。否则现在可​​能不准确,具体取决于服务器日期。
  • 谢谢,唯一的问题是小时一,应该是零,现在是 12,但在你编辑之前,它是 5。
  • 你说得对,应该是 $hours = date("G", mktime(0, 0, 0, 1, 1, 1998) + $duration);
猜你喜欢
  • 2011-06-06
  • 2014-03-21
  • 1970-01-01
  • 2015-03-23
  • 2017-03-22
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多