日付関連のjavascriptを2つご紹介します。今回はその1つめ。
date_shaping()というスクリプトで、気楽に記入した日付を整形してくれます。手入力された日付の整形にどうぞ。
「気楽に記入した日付を整形」というのはたとえば次のような感じです。
例1)2002/2/15 を与えると 2002-02-15 を返します。
→ 区切り文字の/を-にして、1桁のとき0を付ける。
例2)2-15 を与えると 2015-02-15 を返します。
→ 月-日のとき、今年と見なします。
例3)122/15 を与えると空文字(”)を返します。
→ 年月日として認識できないときは空文字を返します。
パラメータは2つ。
1つめのパラメータinput_dtは、気楽に記入した日付です。
2つめのパラメータparam_separator_charは、整形後の区切り文字です。省略されたら’-‘(ハイフン)を区切り文字にします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
function date_shaping(input_dt, param_separator_char) { //2つめのパラ-メータが省略されたら'-'にする。 separator_char = (param_separator_char === undefined || param_separator_char == '-') ? '-' : '/'; var dts = []; var c = 0; //年月日の3カ所に分ける準備 var temp_dts1 = []; var temp_dts2 = []; var i; var j; //'/'で区切って、 temp_dts1 = input_dt.split('/'); for(i = 0; i < temp_dts1.length; i++){ //さらに'-'で区切って、 temp_dts2 = temp_dts1[i].split('-'); for(j = 0; j < temp_dts2.length; j++){ //各部分を配列dts[]に格納。 dts[c] = temp_dts2[j]; c++; } } //2か所しかなかったら、 if(c == 2){ //2か所めを「日」に、1か所めを「月」にずらす dts[2] = dts[1]; dts[1] = dts[0]; //今年の「年」を補う now = new Date(); var fy = now.getFullYear(); dts[0] = fy.toString(10); c = 3; } //値のチェック var ok = false; if(c == 3){ ok = true; var dtn = []; for(i = 0; i < c; i++){ //数字でなければエラー if(dts[i].match(/[0-9]+/)){ dtn[i] = parseInt(dts[i]); }else{ ok = false; } } } if(ok){ //範囲をチェックする dt = new Date(dtn[0], dtn[1]-1, dtn[2]); if(dt.getFullYear() == dtn[0] && dt.getMonth() == dtn[1]-1 && dt.getDate() == dtn[2]){ //'yyyy-mm-dd'の形に組み立てる var output_dt = ''; for(i = 0; i < 3; i++){ //月と日が1桁の場合は0を付ける if(i > 0 && dtn[i] < 10){ output_dt = output_dt + '0'; } output_dt = output_dt + dtn[i].toString(10); output_dt = (i < 2) ? output_dt + separator_char : output_dt; } return output_dt; } } return ''; } |
ご参考までに、使用している手法は、
・パラメータの省略
・配列の宣言、代入、参照
・数字文字を数値に変換するparseInt()
・数値を数字文字に変換するtoString(10)
・数字だけかチェックする正規表現match(/[0-9]+/)
・今年の年を取得
・日付として正しいかのチェック
など。
次回は西暦日付を和暦に変えるスクリプトをご紹介します。