【发布时间】:2011-06-17 01:49:36
【问题描述】:
我有这个字符串
1010081-COP-8-27-20110616214459
我需要从这个字符串的末尾开始计算最后 6 个字符(因为从开头开始可能很长)
然后我需要在每 2 个字符后添加冒号。
所以从最后算起 6 个字符后就是
214459
添加冒号后,它将如下所示:
21:44:59
你能帮我实现它吗?
我真的不知道从哪里开始!
谢谢
【问题讨论】:
我有这个字符串
1010081-COP-8-27-20110616214459
我需要从这个字符串的末尾开始计算最后 6 个字符(因为从开头开始可能很长)
然后我需要在每 2 个字符后添加冒号。
所以从最后算起 6 个字符后就是
214459
添加冒号后,它将如下所示:
21:44:59
你能帮我实现它吗?
我真的不知道从哪里开始!
谢谢
【问题讨论】:
您可以使用 substr、str_split 和 implode 来做到这一点
为了清晰起见,代码在多行中完成,但可以很容易地在一行中完成:
$str = '1010081-COP-8-27-20110616214459';
//Get last 6 chars
$end = substr($str, -6);
//Split string into an array. Each element is 2 chars
$chunks = str_split($end, 2);
//Convert array to string. Each element separated by the given separator.
$result = implode(':', $chunks);
【讨论】:
echo preg_replace('/^.*(\d{2})(\d{2})(\d{2})$/', '$1:$2:$3', $string);
在我看来,尽管该字符串具有您应该将其解析为数据的特定格式。比如:
sscanf($string, '%u-%3s-%u-%u-%u', $id, $type, $num, $foo, $timestamp);
$timestamp = strtotime($timestamp);
echo date('Y-m-d H:i:s', $timestamp);
【讨论】:
'/^(.+)(\d{2})(\d{2})(\d{2})$/', '$2:$3:$4',如果他只想要时间的话。
如果你只是想要时间:
$time = rtrim(chunk_split(substr($s,-6),2,':'),':');
【讨论】:
$final = "1010081-COP-8-27-20110616214459";
$c = substr($final, -2);
$b = substr($final, -4, 2);
$a = substr($final, -6, 2);
echo "$a:$b:$c";
【讨论】: