Как я могу предотвратить сбой PHP при создании объекта DateTime?
$in = new DateTime($in); $out = new DateTime($out);
$in
и $out
исходят из формы, чтобы они могли быть чем угодно. Я принуждаю пользователя использовать календарь и блокировать его с датами с помощью javascript. Что делать, если пользователь может обойти эту проверку?
Если $in = "anything else other than a date"
PHP сработает и заблокирует рендеринг всей страницы.
Как предотвратить это и просто return(0)
если PHP не может проанализировать дату?
Посмотрите документацию по DateTime()
, вот небольшой фрагмент:
<?php try { $date = new DateTime('2000-01-01'); } catch (Exception $e) { echo $e->getMessage(); exit(1); } echo $date->format('Ym-d'); ?>
PHP Manual DateTime :: __ construct ()
strtotime()
вернет false, если формат плохой, поэтому это должно ломать плохие форматы.
if (strtotime($in) === false) { // bad format }
Как насчет обработки исключений?
try { $in = new DateTime($in); } catch (Exception $e) { echo $e->getMessage(); return(0); }
Конструктор DateTime генерирует исключение, если строка даты / времени не может быть проанализирована. Вы можете поймать его. Посмотрите следующий фрагмент:
try { $dt = new DateTime('10th - 12th June 2013'); // bad date string } catch (Exception $e) { var_dump($e->getMessage()); }