和暦から西暦へ

 

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

よかったよかった

Jqueryのdatatableについて

今回MySQLでServer-SideのSQL飛ばしてなんかJSON受け取ってっていう処理をしたかったからGitHubから落としていろいろ試してみた。

https://github.com/DataTables/DataTables

さて、なんか最初に試したパターンがなんかJSON全部受け取ってユーザーサイドで処理をする雰囲気でメモリが5万件のデータで100MBも食ってる。

さすがにこれはだめだろうという事でServerSideを試した(でも5万件でもわりかしすんなり動くということにちょっとびっくり)

さて日本語のSQLが飛ばないぞと、

なんか文字コードが良くなさそうでとりあえず全部をUTF8にする。

それでもなんかカラムが存在していませんとエラーが出る。

結論はPDOの文字コード指定してないのが原因でした。

$db = @new PDO(
“mysql:host={$sql_details[‘host’]};dbname={$sql_details[‘db’]};charset=utf8”,
$sql_details[‘user’],
$sql_details[‘pass’],
array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )
);

charset=utf8″を追加したら動いた。

良かった。