Несмотря на то, что @Truth прав в том, что пользователь может многое сделать, чтобы сделать его трудным, на самом деле существует способ сделать довольно приличную работу по синтаксическому анализу поля ввода даты для работы. Принимается во внимание ряд проблем с пользовательским вводом, которые могут возникнуть.
Обратите внимание, что он делает два предположения:
что местный использует формат даты м / д / у
Если год введен в краткой форме, мы имеем дело с 2000+ годом
<?php
// Trim spaces from beginning/end
$date = trim(request($field));
// Allow for the user to have separated by spaces
$date = str_replace(" ", "/", $date);
// Allow for the user to have separated by dashes or periods
$date = str_replace("-", "/", str_replace(".", "/", trim($date)));
// Explode the date parts out to ensure a year
// Granted, this is geo-centric - you could adjust based on your locale
$dateparts = explode("/", $date);
// Check for a year. If not entered, assume this year
if (!isset($dateparts[2])) {$dateparts[2] = date("Y");}
// Force year to integer for comparison
$dateparts[2] = (int)$dateparts[2];
// Allow for user to use short year. Assumes all dates will be in the year 2000+
if ($dateparts[2] < 2000) {$dateparts[2]+= 2000;}
// Re-assemble the date to a string
$date = implode("/", $dateparts);
// Utilize strtotime and date to convert date to standard format
$date = date("m/d/Y", strtotime($date));
?>
Отказ от ответственности: Да, это подробный способ сделать это, однако я сделал это для ясности примера, а не для эффективности.