2014-05-08 16 views
10

將此字符串轉換爲PHP中的DateTime格式「A H:我m/d/y」是可行的嗎?將字符串轉換爲DateTime與AM/PM

例字符串:AM 05:28 13年7月8日

這不工作

$date = DateTime::createFromFormat('A H:i m/d/y', 'AM 05:28 07/08/13'); 

這工作:

$date = DateTime::createFromFormat('H:i m/d/y', '05:28 07/08/13'); 

$date = DateTime::createFromFormat('H:i m/d/y A', '05:28 07/08/13 AM'); 

醜陋的解決方法:

$myDate = 'AM 05:28 07/08/13'; 
$myDate = substr($myDate, 3, strlen($myDate)-3)." ".substr($myDate, 0, 2); 

$date = DateTime::createFromFormat('H:i m/d/y A', $myDate); 
+1

看起來像http://stackoverflow.com/questions/16936979/php-datetimecreatefromformat-am-pm-issue相同的問題。沒有找到其他解決方案。 – Barmar

+5

這是一個PHP錯誤:https://bugs.php.net/bug.php?id=64975 – Barmar

+0

不幸的是,快速搜索'谷歌'導致我懷疑它不是一個流行的時間轉換。所以沒有我可以提供鏈接的算法。 –

回答

2

這是一個php bug。嘗試使用下一個功能:

function createFromFormat($format, $time) 
{  
    $is_pm = (stripos($time, 'PM') !== false); 
    $time = str_replace(array('AM', 'PM'), '', $time); 
    $format = str_replace('A', '', $format); 

    $date = DateTime::createFromFormat(trim($format), trim($time)); 

    if ($is_pm) 
    { 
     $date->modify('+12 hours'); 
    } 

    return $date; 
} 


$date = createFromFormat('H:i m/d/y A', '05:28 07/08/13 AM'); 
var_dump($date->format('d.m.Y H:i')); // string(16) "08.07.2013 05:28" 

$date = createFromFormat('H:i m/d/y A', '05:28 07/08/13 PM'); 
var_dump($date->format('d.m.Y H:i')); // string(16) "08.07.2013 17:28"