PHP在字符串的多个点处插入字符

时间:2011-05-24 12:15:32

标签: php

我有一个从数据库发送的字符串,我想把它变成一个日期/时间字符串。源字符串是:

20110524153631

我希望它是:

2011-05-24 15:36:31

我知道我可以使用多个插件,但我想知道是否有更简单的方法来执行此操作。我怎么能做到这一点?

6 个答案:

答案 0 :(得分:8)

在PHP 5.3中,您可以使用DateTime::createFromFormat()方法(或其date_create_from_format()别名)。

echo DateTime::createFromFormat(
    'YmdHis',
    '20110524153631'
)->format('Y-m-d H:i:s');

对于早期版本(为什么?),您可以使用任何数量无聊或奇特的方式来使用字符串。

vprintf("%s-%s-%s %s:%s:%s", sscanf("20110524153631", "%4s%2s%2s%2s%2s%2s"));

答案 1 :(得分:4)

我们可以使用DateTime功能来解析我们的日期,而不是这样做:

$date = DateTime::createFromFormat('YmdHis', '20110524153631');
echo "This date is: " . $date->format('Y-m-d H:i:s') . "\n";

$ php test.php
This date is: 2011-05-24 15:36:31

答案 2 :(得分:4)

$in = '20110524153631';
list(
    $year,
    $month,
    $day,
    $hour,
    $minute,
    $second) = sscanf($in, '%4d%2d%2d%2d%2d%2d');
echo sprintf('%4d-%02d-%02d %02d:%02d:%02d',
    $year,
    $month,
    $day,
    $hour,
    $minute,
    $second);

答案 3 :(得分:3)

$str = '20110524153631';
echo preg_replace("/(.{4})(.{2})(.{2})(.{2})(.{2})(.{2})/", "\$1-\$2-\$3 \$4:\$5:\$6", $str);

答案 4 :(得分:2)

可能性:

echo preg_replace('/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/',
         '$1-$2-$3 $4:$5:$6', '20110524153631');

答案 5 :(得分:0)