Bir stringin belirttiğimiz fortmata uygun bir tarih olup olmadığını kontrol eden bir fonksiyon.

function is_date($str, $formats=NULL)
{
	if (!$formats)
	{
		$formats = array(
			'Y-m-d',
			'd-m-Y'
		);
	}
	$formats = (array)$formats;

	$is_date = FALSE;
	try
	{
		foreach ($formats as $key => $format)
		{
			$date = DateTime::createFromFormat($format, $str);

			if ($date!==FALSE && $date->format($format)===$str)
			{
				$is_date = TRUE;
				break;
			}
		}
	}
	catch (Exception $exc)
	{

	}

	return $is_date;
}

var_dump(is_date('2013-02-20'));           // true
var_dump(is_date('16-05-1988'));           // true
var_dump(is_date('05-16-1988'));           // false
var_dump(is_date('02-20-2013', 'm-d-Y'));  // true

var_dump(is_date('20-02-2013', array('m-d-Y', 'd-m-Y', 'Y-m-d')));  // true
var_dump(is_date('02-20-2013', array('m-d-Y', 'd-m-Y')));  // true
var_dump(is_date('20-20-2013', array('m-d-Y', 'd-m-Y', 'Y-m-d')));  // false

Bu fonksiyonun çalışması için php Datetime eklentsinin kurulu olması gerekiyor.

İyi çalışmalar.