2010-04-12 15 views
7

Estoy trabajando con PHP 5.3 en mi máquina local y necesito analizar el formato de fecha del Reino Unido (dd/mm/aaaa). Descubrí que strtotime no funcionaba con ese formato de fecha, así que usé date_create_from_format, lo que funciona muy bien.date_create_from_format equivalent for PHP 5.2 (or lower)

Ahora, mi problema es que mi servidor provisional está ejecutando PHP 5.2, y date_create_from_format no funciona en esa versión. (Es un servidor compartido, y no tendría ni idea de cómo actualizarlo a PHP 5.3)

¿Existe una función similar a date_create_from_format que pueda usar? Bespoke o nativo de PHP?

Respuesta

13

Si strptime no está disponible para usted, entonces esta es una idea diferente. Es similar al enfoque de Col. Shrapnel, pero en su lugar usa sscanf para analizar los valores de la parte de fecha en variables y los utiliza para construir un nuevo objeto DateTime.

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

Si necesita analizar solo un formato en particular, se trata de una operación de cadena básica.

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

esto solo le da tres cadenas, no la fecha analizada – user187291

+0

@stereofrog uh oh qué problema :) –

2

Trate strptime() que está disponible en PHP 5.1 y superior.

+2

no disponible en win dows aunque – Gordon

+0

Gracias Dav. Sí, estoy en Windows para el desarrollo local (usando XAMPP, PHP 5.3), pero los servidores de puesta en escena y en vivo son LAMP, por lo que esto funcionaría como un retroceso. – leekelleher

2

incluyen este código:

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

Gracias por la idea. Lamentablemente, no pude ponerlo en funcionamiento con el formato 'Y-m-d H: i: s' incluso después de agregar el mapeo de 's' a '% S' ... – AntonK

0

utilice el formato DD-MM-AA y marca de tiempo, creo que será más fácil para usted

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

lo he usado