如何在PHP中像00:00:00这样从字符串格式化MP3长度时间

时间:2018-06-21 19:39:56

标签: php

我将MP3的长度作为00:00:00示例:01:23:15格式的字符串存储在MYSQL中。

我正在尝试构建一种函数,以一种更加用户友好的方式对其进行格式化,以节省数小时,分钟as the case may be and do not show leading zeros or:`。

02:43:12将变为2:45:12(在这种情况下,小时中的前导零将被删除)

02:03:12将变为2:03:12(在这种情况下,由于存在小时,因此在视觉上需要分钟的前导零)

00:18:28将变为18:28(在这种情况下,小时数的前导零和:被删除)

00:08:28将变为8:28(在这种情况下,由于没有小时,因此不需要分钟数的前导零)

00:00:14将变成00:14(在这种情况下,如果分钟为零,那么它仍应显示两个前导零,因此很明显,您只看到秒)

00:00:04将变成00:04(在这种情况下,分钟和秒的前导零都显示出来使其更具可读性)

2 个答案:

答案 0 :(得分:2)

如果您不想做很多条件,也可以使用简单的str_replace()并最终检查从02:43:12中删除前导0来做到这一点

<?php
$tests = [
    '12:43:23',    
    '02:43:12',    
    '02:03:12',    
    '00:18:28',    
    '00:08:28',    
    '00:00:14',    
    '00:00:04',   
    '00:00:00',
];

function mp3time($str) {
    $str = str_replace(['00:0', '00:', '0:'], ['', '', '00:'], $str);

    if (strlen($str) === 8 && $str[0] == 0) {
        $str = substr($str, 1);
    }

    return $str;
}

foreach ($tests as $timestamp) {
    echo mp3time($timestamp).PHP_EOL;
}

结果:

12:43:23
2:43:12
2:03:12
18:28
8:28
00:14
00:04
00:00

https://3v4l.org/H4A06

答案 1 :(得分:0)

@Larence Cherones解决方案对我有用,但我发现另外2个用例不正确。如果分钟为:00或秒为:00,则格式混乱。无法找到修改他的代码以适应这些情况的好方法,所以我想出了他的解决方案的这种混合形式。

function format_track_time($time) {

   $a = substr($time, 0, 3); // hours
   $b = substr($time, 3, 3); // minutes
   $c = substr($time, 6, 2); // seconds
   $a = str_replace(['00:'], [''], $a);

   $time = $a . $b . $c;

   // REMOVE LEADING ZERO FOR HOURS
   if (strlen($time) == 8 && $time[0] == '0') {
       $time = substr($time, 1);
   } 
   // REMOVE LEADING ZERO FOR MINUTES IF NO HOURS
   if (strlen($time) == 5 && $time[0] == '0') {
       $time = substr($time, 1);
   }

   return $time;    
}