和暦のぐちゃぐちゃな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とばせるはず。
よかったよかった