[jQuery UI datepicker] 不正な日付を修正する方法

システムによっては月日が二桁を想定しているものもあるかと思います。
例えば2012年2月18日は「2012/2/18」ではなく「2012/02/18」とか。


(サーバサイドで直してやってもいいんですが、画面の方で修正した方がユーザーには分かりやすいかもしれないし…という事で)

datepickerが閉じられた時に(onClose)、入力された日付を精査します。
精査の内容は以下の通りです。

  • 西暦が4以上は今年の西暦をセットする(10000年とか)
  • 月・日のゼロパディング
  • 0月や0日が入力された場合は今月の月日をセットする
<script type="text/javascript">
$(function() {
    // 本日の日付
    var nowdate = new Date();
    var year = nowdate.getFullYear();
    var mon  = nowdate.getMonth() + 1;
    var day  = nowdate.getDate();

    $("#datepicker").datepicker({
        onClose : function(selectedDate) {
            if(selectedDate!=""){
                var dpckr = selectedDate.split("/");
                var fmYY  = dpckr[0]; // year
                var fmMM  = dpckr[1]; // month
                var fmDD  = dpckr[2]; // day
                
                // 空なら0入れておく
                if(fmYY=="" || fmYY==null){ fmYY = 0; }
                if(fmMM=="" || fmMM==null){ fmMM = 0; }
                if(fmDD=="" || fmDD==null){ fmDD = 0; }
                // 西暦が4桁以上の場合は今年をセット
                if (fmYY.length > 4){ fmYY = year; }
                // ゼロパディング
                if (parseInt(fmMM, 10) < 10) { fmMM = "0" + parseInt(fmMM, 10); }
                if (parseInt(fmDD, 10) < 10) { fmDD = "0" + parseInt(fmDD, 10); }
                // 00の場合は今月、今日をセット
                if (fmMM == "00") { fmMM = mon; }
                if (fmDD == "00") { fmDD = day; }

                // セット
                $(this).val(fmYY + "/" + fmMM + "/" + fmDD);
                
            }
        }
    });
});
</script>

もう少し綺麗な書き方があると思うのですが、
年末でめんどくさくなってこれでいいやってなりました。
(あまり複雑な状況は想定してないです。入力途中で日付や年が変わるだとか)

他のdatapickerにも応用は訊くかと思います。

twitterfacebookhatenafacebook