在字符串中间添加一个字符

17

这可能有一个简单的解决方案,让人感到尴尬。我有一串用4个字符表示的时间,例如1300。

我想将该字符串显示为13:00。我感觉肯定有一种更优雅的解决方案,比我目前正在使用的方法更好。

我目前的做法是:

$startTime = get_field($dayStart, $post->ID);
$endTime = get_field($dayEnd, $post->ID);

        for ($x=0; $x = 4; $x++){

            if(x == 2){
                $ST .= ':';
                $ET .= ':';
            } else {
                $ST .= $startTime[x];
                $ET .= $endTime[x];
            }

        }

$startTime = $ST;
$endTime = $ET;

该字符串始终为4个字符长。


关于所选答案的注释:显然在提问时没有人足够聪明地找到执行所需操作的唯一函数。所选答案可行,但 Frankey 的答案才是正确的答案。 - Carlos B. Feitoza Filho
4个回答

27
$time = "1300";    
$time = substr($time,0,2).':'.substr($time,2,2);

编辑:

这是一个解决此问题的通用方法:

function insertAtPosition($string, $insert, $position) {
    return implode($insert, str_split($string, $position));
}

如果 $time = "500",第二个返回值为 "50:0"。 - Max
必须从结尾考虑。 - Max
@Ethan 良好的口吻是一种通用解决方案。但你已经完成了任务 :) - Max
你在编辑中编写的自定义函数有一个原生的PHP函数,可以看下面我的回答。 - Frankey
当位置为零时,您的通用解决方案会发生什么?或者当字符串长度是位置的多倍时会怎样?... :) - GregorMohorko
$time = substr($time,0,5).'-'.substr($time,5,2).'-'.substr($time,7,1); => "11111-11-1"
- Muhammad Usama

22

我喜欢这个解决方案,因为它只是一个函数

substr_replace('1300', ':', 2, 0);

http://php.net/substr_replace


这是一个指向 PHP 函数 substr_replace 的链接。

我在这里想知道为什么这个答案不是被采纳的答案,如果它是最正确的。作为作者,我会回来选择这个正确的答案。 - Carlos B. Feitoza Filho

6
implode(":",str_split($time,2));

5
substr_replace( $yourVar, ':', -2, 0 );

将945变成9:45,1245变成12:45。


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