我有一個字符串從數據庫發送,我想把它變成一個日期/時間字符串。源字符串是:PHP在字符串的多個點插入字符
20110524153631
我希望它是:
2011-05-24 15:36:31
我知道我可以使用多個插件,但我想知道是否有一個更簡單的方法來做到這一點。我怎樣才能做到這一點?
我有一個字符串從數據庫發送,我想把它變成一個日期/時間字符串。源字符串是:PHP在字符串的多個點插入字符
20110524153631
我希望它是:
2011-05-24 15:36:31
我知道我可以使用多個插件,但我想知道是否有一個更簡單的方法來做到這一點。我怎樣才能做到這一點?
在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"));
一種可能性:
echo preg_replace('/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/',
'$1-$2-$3 $4:$5:$6', '20110524153631');
$str = '20110524153631';
echo preg_replace("/(.{4})(.{2})(.{2})(.{2})(.{2})(.{2})/", "\$1-\$2-\$3 \$4:\$5:\$6", $str);
而是這樣做的,我們可以用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
$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);
這不會給日期/時間部分的預期輸出少於10. – salathe 2011-05-24 12:30:27
已經注意到(並且即將解決它),但是謝謝:) – KingCrunch 2011-05-24 12:32:36
沒問題,很樂意提供幫助。 :) – salathe 2011-05-24 12:33:16
爲什麼不能在SELECT或INSERT查詢中使用http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date?
這不是一個正常的數據庫。我說數據庫來簡化問題。要改變這種格式,我將不得不改變大約2K行代碼:D – 2011-05-24 13:08:33
+1有趣的'vprintf'解決方案。 – deceze 2011-05-24 12:29:28
很多很好的答案,但我選擇這個,因爲它的'createFromFormat'是我想要的(也是由onteria_回答),但它也涵蓋了早期版本的PHP。非常感謝你。 – 2011-05-24 13:09:58