2010-04-12 16 views
7

Sto lavorando con PHP 5.3 sulla mia macchina locale e aveva bisogno di analizzare un britannico formato della data (gg/mm/aaaa). Ho trovato che strtotime non ha funzionato con quel formato data, quindi ho usato invece date_create_from_format - che funziona benissimo.date_create_from_format equivalente per PHP 5.2 (o inferiore)

Ora, il mio problema è che il mio server di staging sta eseguendo PHP 5.2 e date_create_from_format non funziona su quella versione. (E 'un server condiviso, e non avrebbe un indizio su come eseguire l'aggiornamento a PHP 5.3)

Così, c'è una funzione simile a date_create_from_format che posso usare? Nato su misura o PHP?

risposta

13

Se strptime non è a disposizione di voi, allora ecco un idea diversa. È simile all'approccio di Col. antischegge ma utilizza sscanf per analizzare i valori data parti in variabili e usa quelli per costruire un nuovo DateTime oggetto.

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

Se avete bisogno di analizzare solo un formato particolare, si tratta di un'operazione di stringa elementare.

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

questo gli dà solo tre corde, non la data analizzato – user187291

+0

@stereofrog uh oh che un problema :) –

2

Provare strptime() che è disponibile in PHP 5.1 e versioni successive.

+2

non disponibile su win Dows però – Gordon

+0

Grazie Dav. Sì, sono su Windows per dev locale (usando XAMPP, PHP 5.3), ma i server di staging e live sono LAMP, quindi questo funzionerebbe come fallback. – leekelleher

2

includono questo codice:

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

Grazie per l'idea. Sfortunatamente non sono stato in grado di farlo funzionare con il formato 'Y-m-d H: i: s' anche dopo aver aggiunto la mappatura da 's' a '% S' ... – AntonK

0

formato uso GG-MM-AA e timestamp, penso che sarà più facile per voi

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

ho usato