2014-05-08 14 views
10

Jest możliwe przekształcenie mojego ciągu znaków w tym formacie "A H: i m/d/y" na DateTime w php?PHP String to DateTime z AM/PM

Przykład ciąg: AM 05:28 07/08/13

To nie działają

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

to działa:

$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'); 

brzydki obejścia:

$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

wygląda ten sam problem jak http://stackoverflow.com/questions/16936979/php-datetimecreatefromformat-am-pm-issue. Nie znaleziono też żadnego innego rozwiązania. – Barmar

+5

Jest to błąd PHP: https://bugs.php.net/bug.php?id=64975 – Barmar

+0

Niestety, szybkie wyszukiwanie "google" prowadzi mnie do podejrzeń, że nie jest to popularna konwersja czasu. więc nie ma algorytmów, do których mogę podać linki. –

Odpowiedz

2

To jest php bug. Spróbuj użyć następną funkcję:

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"