アプリ版:「スタンプのみでお礼する」機能のリリースについて

Javascriptでフォームに入力された日付の有効性チェックを行いたく、下記のように記述しました。

if(MONTH >= 0 && MONTH <= 11 && DAY >= 1 && DAY <= 31){
var DATE = new Date((YEAR, MONTH, DAY);
if(DATE.getFullYear() == YEAR && DATE.getMonth() == MONTH && DATE.getDate() == DAY)
{alert("有効である");}
else{alert("有効ではない");}
}

この記述だと正常に動作はしますが、今回作っているものが年が必須項目ではないため、年に入力がない時には月日の部分のみで有効性をチェックしたいのです。
その場合、getMonthとgetDateだけを使うという手法ではダメなのでしょうか?(やってみましたが、正しい日付でも「有効ではない」と判断されてしまいます)
そこで、年がカラの時に、月の値が2、4、6、9、11かつ日の値が31の場合を「有効ではない」としたいのですが、うまくいきません・・・。

・年月日がそれぞれ別の入力ボックスになっているフォーム
・年は任意、月日のみ必須項目
・yyyymmddの形式になっているか、日付は有効か(うるう年判定や31日の有無)を判定したい
・年がカラの場合は、うるう年に関係なく日付に0229を許可(31日の有無判定は必要)

昨日から本格的にJavascriptを使い始めたばかりで、かなり初歩的な質問かもしれませんが、いろいろ調べても解決策が見つからず困っています。
何卒よろしくお願いいたします。

A 回答 (2件)

年を使わないなら、Date オブジェクトを使わずに、


グレゴリオ暦の計算を独自に行う方が早そうです。

var m=[31,29,31,30,31,30,31,31,30,31,30,31];
if (year) { if (year%4!=0 || year%100==0 && year%400!=0) m[1]=28; } // 年が指定されたら閏を考慮
function B(n,a,b){return a<=n && n<=b}
if ( B(month,1,12) && B(day,1,m[month-1]) ) { alert('有効') } else { alert('無効'); }

余談ではありますが

全て大文字の変数名は、JavaScript では慣習的に「定数」だけに使用されます。
もし何らかの特別な理由が無い限りは、変数名は小文字で命名することを、強くオススメします。
    • good
    • 0

>getMonthとgetDateだけを使うという手法ではダメなのでしょうか?



それで必要十分だとおもいます
ただし入力のブレを調整するのであれば、YEAR,MONTH,DAYはぞれぞれ
parseIntしてキャストした数値に置き換えておくとよいでしょう。

>(やってみましたが、正しい日付でも「有効ではない」と判断されてしまいます)

おそらく勘違いでは?
どうしてもというなら具体例を提示してください

>年がカラの時に、月の値が2、4、6、9、11かつ日の値が31の場合を「有効ではない」としたいのですが、うまくいきません・・・。

年がからなら逆に適当な年を充てればよいのでは?

>・年がカラの場合は、うるう年に関係なく日付に0229を許可(31日の有無判定は必要)

これは例外処理でMONTH=="1"&&DAY=="29"は無条件にOKとすればよいでしょう
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!