2017-02-22 86 views
-2

Я пытаюсь сделать ввод данных пользователем, чтобы ограничить поиск. Я использую следующее:Определить DateTime вывел день в конструкторе

try { 
    $begin = new \DateTime($range['begin']); 
} catch (\Exception $e) { 
    $begin = null; 
} 

Если дата не может быть построена, запрос (не показан) не изменяется.

Иногда пользователи вводят только месяц, и было бы очевидно, что пользователь хочет выполнить поиск между первым и последним днем ​​месяца, и я могу изменить запрос по-другому.

К сожалению, php infers, без другой спецификации, которую пользователь имеет в виду в начале месяца. Есть ли способ определить, произошло ли это? Другой способ задать этот вопрос: как определить, что пользователь предоставил действительный месяц без дня и отличает его от даты поставки с первым днем ​​месяца, который использует множество форматов DateTime автоматически интерпретирует?

Мой первый проход использовал date_parse, но это также указывает дату.

+2

код [ 'DateTime'] (HTTP: // php.net/manual/en/datetime.construct.php) принимает множество форматов входной строки. Он делает все возможное, чтобы извлечь дату и время из предоставленного ввода. Правила описаны в [документации] (http://php.net/manual/en/datetime.formats.php). Для достижения своей цели вы должны выполнить синтаксический анализ перед передачей входной строки в ['DateTime'], чтобы определить особые ситуации, которые вы хотите обработать (когда пользователь вводит только имя месяца, т. Е.). – axiac

+1

Здесь вы не можете найти много информации. Как выглядит вход? Не можете ли вы просто проверить формат ввода и соответствующим образом изменить его? – miken32

+0

Я предпочитаю простое поле выбора, в котором пользователь может выбрать одно значение из определенного списка оппонентов [сегодня, вчера, 1 неделя, 2 недели и т. Д.], Так что теперь вы можете создать действительный объект DateTime, если это необходимо, или не нуждаться в точках последних периодов, использовать datepicker с функциональностью диапазона, где одна - дата начала и дата окончания второго значения. – DTukans

ответ

-1

лучше всегда знать формат входного значения, так, то вы можете просто преобразовать в объект даты и времени, например:

$inputFieldValue = '22/02/2017'; 
$date = \DateTime::createFromFormat('d/m/Y', $inputFieldValue); 
if ($date instanceof \DateTime) { 
    echo 'input is valid date, do what you need'; 
} else { 
    echo 'input is not valid date'; 
} 

более документации http://php.net/manual/en/datetime.createfromformat.php