2010-04-12 12 views
7

Pracuję z PHP 5.3 na mojej lokalnej maszynie i potrzebuję parsować format daty w Wielkiej Brytanii (dd/mm/rrrr). Zauważyłem, że strtotime nie działa z tym formatem daty, więc zamiast tego użyłem date_create_from_format - który działa świetnie.data_create_from_format dla PHP 5.2 (lub niższego)

Moim problemem jest to, że mój serwer pomostowy działa w PHP 5.2, a date_create_from_format nie działa w tej wersji. (Jest to serwer współdzielony i nie miałby pojęcia, jak uaktualnić go do PHP 5.3)

Czy istnieje funkcja podobna do date_create_from_format, z której mogę korzystać? Natywne lub macierzyste PHP?

Odpowiedz

13

Jeśli nie masz dostępu do strptime, oto inny pomysł. Jest on podobny do podejścia Col. Shrapnel, ale zamiast tego używa sscanf do parsowania wartości części date do zmiennych i wykorzystuje je do skonstruowania nowego obiektu DateTime.

list($day, $month, $year) = sscanf('12/04/2010', '%02d/%02d/%04d'); 
$datetime = new DateTime("$year-$month-$day"); 
echo $datetime->format('r'); 
1

Jeśli chcesz przeanalizować tylko jeden określony format, jest to elementarna operacja łańcuchowa.

list($d,$m,$y)=explode("/",$datestr); 
+0

to tylko daje mu trzy ciągi, nie sparsowaną datę – user187291

+0

@stereofrog uh oh co za problem :) –

2

Wypróbuj strptime(), który jest dostępny w PHP 5.1 i nowszych wersjach.

+2

niedostępne przy wygrywaniu dows though – Gordon

+0

Dzięki Dav. Tak, pracuję w systemie Windows dla lokalnego dewelopera (przy użyciu XAMPP, PHP 5.3), ale serwery inscenizacyjne i na żywo to LAMPA, więc to działałoby jak fallback. – leekelleher

2

obejmują ten kod:

function DEFINE_date_create_from_format() 
{ 

    function date_create_from_format($dformat, $dvalue) 
    { 

    $schedule = $dvalue; 
    $schedule_format = str_replace(array('Y','m','d', 'H', 'i','a'),array('%Y','%m','%d', '%I', '%M', '%p') ,$dformat); 
    // %Y, %m and %d correspond to date()'s Y m and d. 
    // %I corresponds to H, %M to i and %p to a 
    $ugly = strptime($schedule, $schedule_format); 
    $ymd = sprintf(
     // This is a format string that takes six total decimal 
     // arguments, then left-pads them with zeros to either 
     // 4 or 2 characters, as needed 
     '%04d-%02d-%02d %02d:%02d:%02d', 
     $ugly['tm_year'] + 1900, // This will be "111", so we need to add 1900. 
     $ugly['tm_mon'] + 1,  // This will be the month minus one, so we add one. 
     $ugly['tm_mday'], 
     $ugly['tm_hour'], 
     $ugly['tm_min'], 
     $ugly['tm_sec'] 
    ); 
    $new_schedule = new DateTime($ymd); 

    return $new_schedule; 

    } 
} 

if(!function_exists("date_create_from_format")) 
    DEFINE_date_create_from_format(); 
+0

Dzięki za pomysł. Niestety nie byłem w stanie uruchomić go z formatem "Y-m-d H: i: s" nawet po dodaniu mapowania z 's' na '% S' ... – AntonK

0

wykorzystanie formatu DD-MM-YY i znacznik czasu, myślę, że to będzie Ci łatwiej

$date="31-11-2015"; 
$timestamp=strtotime($date); 
$dateConvert=date('d-m-Y', $timestamp); 
echo $dateConvert; 

Używałem go

Powiązane problemy