2011-05-24 85 views
2

我有一個字符串從數據庫發送,我想把它變成一個日期/時間字符串。源字符串是:PHP在字符串的多個點插入字符

20110524153631 

我希望它是:

2011-05-24 15:36:31 

我知道我可以使用多個插件,但我想知道是否有一個更簡單的方法來做到這一點。我怎樣才能做到這一點?

回答

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")); 
+0

+1有趣的'vprintf'解決方案。 – deceze 2011-05-24 12:29:28

+0

很多很好的答案,但我選擇這個,因爲它的'createFromFormat'是我想要的(也是由onteria_回答),但它也涵蓋了早期版本的PHP。非常感謝你。 – 2011-05-24 13:09:58

2

一種可能性:

echo preg_replace('/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/', 
     '$1-$2-$3 $4:$5:$6', '20110524153631'); 
3
$str = '20110524153631'; 
echo preg_replace("/(.{4})(.{2})(.{2})(.{2})(.{2})(.{2})/", "\$1-\$2-\$3 \$4:\$5:\$6", $str); 
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 
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); 
+0

這不會給日期/時間部分的預期輸出少於10. – salathe 2011-05-24 12:30:27

+0

已經注意到(並且即將解決它),但是謝謝:) – KingCrunch 2011-05-24 12:32:36

+0

沒問題,很樂意提供幫助。 :) – salathe 2011-05-24 12:33:16