I am working with arrays of values in PHP. Some of these values may include a date in various string formats.
I need to convert dates in multiple formats to their numeri
In short, is there an easy way to check if a string value is a date?
Not really, seeing as it could be in an arbitrary format.
If at all possible, I would tend to leave parsing to the magic of strtotime()
. If it manages to create a valid date, fine. If it doesn't, you'll receive false
.
Be prepared for the possibility of false positives, though, because strtotime()
parses even things like "Last Friday".
If strtotime()
is too liberal for you, you could consider building a collection of date formats you want to accept, and run PHP 5.3's DateTime:createFromFormat using every one of the formats on every date.
Something like (untested)
$formats = array("d.m.Y", "d/m/Y", "Ymd"); // and so on.....
$dates = array(1,2,3,"4","11/12/2009","22/12/2000",true,false);
foreach ($dates as $input)
{
foreach ($formats as $format)
{
echo "Applying format $format on date $input...
";
$date = DateTime::createFromFormat($format, $input);
if ($date == false)
echo "Failed
";
else
echo "Success
";
}
}