日付チェック

日付文字入力チェック結果
2012/1/11
2012-12-311
2012-2-291
2011-2-29
2012-8-32
20120101
2012/12/12 00:00:001
2012/12/12 12:12:121
2012/12/12 12:121
2012/12/12 121


サンプル
	require_once 'input_check.php';
	$list=array(
		'2012/1/1',
		'2012-12-31',
		'2012-2-29',
		'2011-2-29',
		'2012-8-32',
		null,
		'',
		'20120101',
		'2012/12/12 00:00:00',
		'2012/12/12 12:12:12',
		'2012/12/12 12:12',
		'2012/12/12 12',
	);

	$ic=new InputCheck();
	$data=null;
	foreach($list as $d){
		$ent['d']=$d;
		$ent['rs']=$ic->isDate($d);//★日付チェック
		$data[]=$ent;
	}

input_check.php

class InputCheck{





	/**
	 * 日時チェック 閏年対応
	 * @param  $strDate 日付文字列
	 * @return boolean 可否
	 */
	function isDate($strDateTime){


		//トリミング
		$strDateTime=trim($strDateTime);

		//空であればエラー
		if (!$strDateTime){return false;}


		//日時を 年月日時分秒に分解する。
		$aryA =preg_split( '|[ /:_-]|', $strDateTime );
		foreach ($aryA as $key => $val){

			//▼正数以外が混じっているば、即座にfalseを返して処理終了
			if ($this->isPNum($val)==false){
				return false;
			}
			$aryA[$key]=trim($val);
		}

		//▼グレゴリオ暦と整合正が取れてるかチェック。(閏年などはエラー)
		if(!checkdate($aryA[1],$aryA[2],$aryA[0])){
			return false;
		}


		//▼時刻の整合性をチェック
		if ($this->checkTime($aryA[3], $aryA[4], $aryA[5])==false){
			return false;
		}

		return true;


	}



	/**
	 * 時刻の整合性をチェック
	 * @param  $hou 時
	 * @param  $min 分
	 * @param  $sec 秒
	 * @return boolean 可否
	 */
	function checkTime($hou,$min,$sec){


		if($hou < 0 || $hou > 23){

			return false;
		}
		if($min < 0 || $min > 59){

			return false;
		}
		if($sec < 0 || $sec > 59){

			return false;
		}

		return true;
	}
}