2013-04-15 14 views
8

Come posso evitare che PHP si arresti in modo anomalo durante la creazione di un oggetto DateTime?Gestione delle eccezioni ed errori DateTime PHP

$in = new DateTime($in); 
$out = new DateTime($out); 

$in e $out sia proviene da una forma in modo che potessero essere qualsiasi cosa. Applico all'utente l'utilizzo di un calendario e lo blocco alle date con javascript. Cosa succede se l'utente può ignorare questo controllo?

Se $in = "anything else other than a date" PHP andrà in crash e bloccare il rendering della pagina intera.

Come posso evitare questo e solo return(0) se PHP non è in grado di analizzare la data?

+0

Leggere la documentazione (la parte "Errori/Eccezioni") . http://php.net/manual/en/datetime.construct.php#refsect1-datetime.construct-errors –

risposta

11

Partenza la documentazione sul DateTime(), ecco un piccolo frammento:

<?php 
try { 
    $date = new DateTime('2000-01-01'); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
    exit(1); 
} 

echo $date->format('Y-m-d'); 
?> 

PHP Manual DateTime::__construct()

4

strtotime() restituirà false se il formato è errato, pertanto questo dovrebbe catturare formati non validi.

if (strtotime($in) === false) 
{ 
    // bad format 
} 
+0

funziona come fascino ... + 1 –

+0

Questo non funziona per i valori come "30.11.-1" (che è 0000-00-00), var_dump è quindi int (-62169987600). –

3

E la gestione delle eccezioni?

try { 
    $in = new DateTime($in); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
    return(0); 
} 
3

Il DateTime constructor un'eccezione se la stringa data/ora non può essere analizzato. Puoi prenderlo. Date un'occhiata al seguente frammento di codice:

try { 
    $dt = new DateTime('10th - 12th June 2013'); // bad date string 
} catch (Exception $e) { 
    var_dump($e->getMessage()); 
}