
先日仕事でPHPのコードを書いている時に、毎日処理をするバッチ処理のコードを書かなくてはいけなくなりました。
そこで問題発生。
他のプログラムとの連携で、バッチ処理に送られてくる日付と、データベースで使われている日付のフォーマットが違っていて、
さらに、その他のモジュールとのやりとりが、全てバラバラの日付フォーマットになっていました。
オーマイガ!
ということで、それらを柔軟にフォーマット変換できるように関数を作っておいたので、自分が後でコピペで使えるようにブログに残しておきますね。
ちなみに、送られてくる日付フォーマットは、"20230721"で、
データベースで使われているフォーマットは、"2023-07-21"で、
別のプログラム(表示形式)では、"2023/07/21"で使われていました。
他にも、"2023.07.21"という文字列も見え隠れしていたのを、僕は見逃していません。
ジーザス!
ソースコード
function date_format($date_str=null , $separator=''){
if(preg_match('/([0-9]{4}).*?([0-9]{2}).*?([0-9]{2})/' , $date_str , $match)){
return [
$match[1]. $separator .$match[2]. $separator .$match[3]
];
}
else{
return $date_str;
}
}
解説
date_format()という関数名で、送り値に、年月日の並びの数値を入れた時に、yearとmonthとdateを連想配列で抜き出して、指定された$separatorで、整えて送り返してあげる、おもてなしです。
正規表現がポイントですが、"2023年07月21日"という表記でも、ちゃんと取得できます。
でもでもでもでも、
"2023年7月21日"
は認識しません。
年が4桁、月と日が2桁の数値になっていることが大前提になります。
もう少し頑張れば、月と日が1桁でもできるかもですね。
有志がいれば、コメントで完成版ソースを書いてくれますよね?