2013-04-15 12 views
8

Jak mogę zapobiec awarii PHP podczas tworzenia obiektu DateTime?Wyjątek i obsługa błędów DateTime PHP

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

$in i $out zarówno pochodzi od postaci, aby mogli być cokolwiek. Wymuszam na użytkowniku korzystanie z kalendarza i blokowanie go do dat za pomocą javascript. Co się stanie, jeśli użytkownik może ominąć ten czek?

Jeśli PHP zostanie zawieszone i zablokowane renderowanie całej strony.

Jak mogę temu zapobiec i po prostu return(0), jeśli PHP nie jest w stanie przeanalizować daty?

+0

Przeczytaj dokumentację ("Błędy/Wyjątki" część) . http://php.net/manual/en/datetime.construct.php#refsect1-datetime.construct-errors –

Odpowiedz

11

Sprawdź dokumentację DateTime(), oto mały fragment:

<?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() zwróci false, jeśli format jest zły, więc ten powinien złapać złe formaty.

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

Działa jak charm ... + 1 –

+0

To nie działa dla wartości takich jak "30.11.-1" (która jest 0000-00-00), zmienna_dump jest wtedy int (-62169987600). –

3

Co z obsługą wyjątków?

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

DateTime constructor rzuci wyjątek, jeśli ciąg data/czas nie może być analizowany. Możesz go złapać. Przyjrzeć się następującym fragmencie:

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