和暦のぐちゃぐちゃなStringからSQL様の日付フォーマットに変換するやつでまあまあな出来なのが出来た。
ほんとはstrftimeてきなのでやりたかったけどWindowsには対応してないから自作
正規表現は偉大だった。
public static function convNumStringtoDate($src) { $outputArray=array(); //昭和とかを西暦にだけ変換 複数はアレイに $src=mb_convert_kana($src, "ah", "UTF-8");// 「全角」英数字を「半角」に変換します。 //注意!JavaScriptでやる場合は最後のUをとる! UTF8のUです $RegularExpressionM='/(^[mMmM明])\D*(0[1-9]|[123][0-9]|4[012345]|[1-9])\D*(0[1-9]|1[0-2]|[1-9])?\D*(0[1-9]|[12][0-9]|3[01]|[1-9])?.*$/u';// $RegularExpressionT='/(^[tTtT大])\D*(0[1-9]|1[012345]|[1-9])\D*(0[1-9]|1[0-2]|[1-9])?\D*(0[1-9]|[12][0-9]|3[01]|[1-9])?.*$/u'; $RegularExpressionS='/(^[sSsS昭])\D*(0[1-9]|[12345][0-9]|6[01234]|[1-9])\D*(0[1-9]|1[0-2]|[1-9])?\D*(0[1-9]|[12][0-9]|3[01]|[1-9])?.*$/u'; $RegularExpressionH='/(^[hHhH平])\D*(0[1-9]|[12345][0-9]|6[01234]|[1-9])\D*(0[1-9]|1[0-2]|[1-9])?\D*(0[1-9]|[12][0-9]|3[01]|[1-9])?.*$/u';//heisei64まで if(preg_match($RegularExpressionM,$src,$match)){ //echo $match[1]; $y=null; $m=null; $d=null; $y = 1868+$match[2]; if(isset($match[3]))$m = $match[3]; if(isset($match[4]))$d = $match[4]; $outputArray[]=DatetimeUtility::GArraytoString($y,$m,$d); }else if(preg_match($RegularExpressionT,$src,$match)){ $y=null; $m=null; $d=null; $y = 1911+$match[2]; if(isset($match[3]))$m = $match[3]; if(isset($match[4]))$d = $match[4]; $outputArray[]=DatetimeUtility::GArraytoString($y,$m,$d); }else if(preg_match($RegularExpressionS,$src,$match)){ $y=null; $m=null; $d=null; $y = 1925+$match[2]; if(isset($match[3]))$m = $match[3]; if(isset($match[4]))$d = $match[4]; $outputArray[]= DatetimeUtility::GArraytoString($y,$m,$d); }else if(preg_match($RegularExpressionH,$src,$match)){ $y=null; $m=null; $d=null; $y = 1988+$match[2]; if(isset($match[3]))$m = $match[3]; if(isset($match[4]))$d = $match[4]; $outputArray[]=DatetimeUtility::GArraytoString($y,$m,$d); } $RegularExpressionS4_2_2='/^()(19[0-9][0-9]|20[0-9][0-9])\D*(0[1-9]|1[0-2]|[1-9])?\D*(0[1-9]|[12][0-9]|3[01]|[1-9])?.*$/';// if(preg_match($RegularExpressionS4_2_2,$src,$match)){ $y=null; $m=null; $d=null; $y = $match[2]; if(isset($match[3]))$m = $match[3]; if(isset($match[4]))$d = $match[4]; $outputArray[]=DatetimeUtility::GArraytoString($y,$m,$d); } $RegularExpressionM2_2_2='/^()(0[1-9]|[123][0-9]|4[012345]|[1-9])\D*(0[1-9]|1[0-2]|[1-9])?\D*(0[1-9]|[12][0-9]|3[01]|[1-9])?$/';// if(preg_match($RegularExpressionM2_2_2,$src,$match)){ $y=null; $m=null; $d=null; $y = 1868+$match[2]; if(isset($match[3]))$m = $match[3]; if(isset($match[4]))$d = $match[4]; $outputArray[]=DatetimeUtility::GArraytoString($y,$m,$d); } $RegularExpressionT2_2_2='/^()(0[1-9]|1[012345]|[1-9])\D*(0[1-9]|1[0-2]|[1-9])?\D*(0[1-9]|[12][0-9]|3[01]|[1-9])?$/';// if(preg_match($RegularExpressionT2_2_2,$src,$match)){ $y=null; $m=null; $d=null; $y = 1911+$match[2]; if(isset($match[3]))$m = $match[3]; if(isset($match[4]))$d = $match[4]; $outputArray[]=DatetimeUtility::GArraytoString($y,$m,$d); } $RegularExpressionS2_2_2='/^()(0[1-9]|[12345][0-9]|6[01234]|[1-9])\D*(0[1-9]|1[0-2]|[1-9])?\D*(0[1-9]|[12][0-9]|3[01]|[1-9])?$/';// if(preg_match($RegularExpressionS2_2_2,$src,$match)){ $y=null; $m=null; $d=null; $y = 1925+$match[2]; if(isset($match[3]))$m = $match[3]; if(isset($match[4]))$d = $match[4]; $outputArray[]=DatetimeUtility::GArraytoString($y,$m,$d); } $RegularExpressionH2_2_2='/^()(0[1-9]|[12345][0-9]|6[01234]|[1-9])\D*(0[1-9]|1[0-2]|[1-9])?\D*(0[1-9]|[12][0-9]|3[01]|[1-9])?$/';// if(preg_match($RegularExpressionH2_2_2,$src,$match)){ $y=null; $m=null; $d=null; $y = 1988+$match[2]; if(isset($match[3]))$m = $match[3]; if(isset($match[4]))$d = $match[4]; $outputArray[]=DatetimeUtility::GArraytoString($y,$m,$d); } return $outputArray; } private static function GArraytoString($y,$m,$d) { if(isset($m)){ $m=str_pad($m, 2, 0, STR_PAD_LEFT); // 01 if(isset($d)){ $d=str_pad($d, 2, 0, STR_PAD_LEFT); // 01 return $y."-".$m."-".$d; } return $y."-".$m; } return $y; }
これで綺麗にSQLとばせるはず。
よかったよかった