2012-01-09 11 views
2

日付を検証する簡単な関数を書いています。問題はスイッチの演算子が何も一致しないと思われ、maxDayの値が0のままであることです。ifステートメントを使用しても問題はありません。switchコマンドによる日付検証は機能しません

function validateDateFormat(day,month,year) { 
    alert(month); // this was to ensure month was correct and it is!! 
    var maxDay = 0; 
    switch(month) 
    { 
     case 01 :  
     case 03 : 
     case 05 : 
     case 07 : 
     case 08 : 
     case 10 : 
     case 12 : maxDay = 31; break; 
     case 04 : 
     case 06 : 
     case 09 : 
     case 11 : maxDay = 30; break; 
     case 02 : if(year%4 == 0) maxDay = 29; 
       else maxDay = 28; 
       break;  
     //default : return " Invalid month -"; break;  
    } 
    alert(maxDay); 
    if(day > maxDay) {return " Invalid day -";} 
    return "";  
} 
+1

実際に4年ごとに閏年が発生することはありません。あなたのアプリケーションと日付の寿命が重要ではないかもしれないことを検証するでしょう。ちょうどあなたが400年のサイクルで働くことを知りたいと思っていたと思ったので、うるう年の間に8年の間隙があることがあります。 [なぜうるう年が使用されるのか](http://www.timeanddate.com/date/leapyear.html)を参照してください。 – Jonathan

+0

Firebugではうまく動作しています。 –

答えて

0

数字の前には、0を付けるべきではありません。数値リテラルが8進数として解釈されます。 08は有効な8進数ではないため、スクリプトでランタイムエラーが発生している可能性があります。

+0

あなたはそれを試しましたか?これは問題ではありません。 –

+0

それは私のために働いているようです。それはあなたのためではないので、JSの構文エラーを簡単に処理しないブラウザを使用している可能性があると考えました。 – Jacob

+0

または、関数に渡すものが異なる場合があります。それをあなたの投稿に追加する必要があります。 – Jacob

2

根本的な問題は、文字列をvalidateDateFormatの引数として指定していることが強く疑われます。そうであれば、ifを使用した場合の動作は、switchを使用する場合とはまったく異なる場合があります。たとえば、あなたがこれを書くことだったと仮定します。

var num = "9"; 
if (num == 9) 
    alert("true"); 

これはtrue==ので(ダブル等号を)警告の比較を行う前に、数にnum内の文字列の強制をトリガします。 switchは型強制を行いません。より厳密===(三重イコール)演算子を、使用しているので...

var num = "9"; 
switch(num) { 
    case 9: 
     alert("true"); 
     break; 
} 

:しかし、これは何も警告しません。

これは、しかし、警告trueを行います。

var num = "9"; 
switch(num) { 
    case "9": // string 
     alert("true"); 
     break; 
} 

...私たちは今、文字列を比較しているので。

コードを修正するには、実際の数値を渡すか、文字列を比較する関数を変更する必要があります。

注:switchの動作はsection 12.11 of the ECMAScript specでカバーされています。

+0

ちょうどそれを正確に理解しました。私は整数型ではなく文字列型で入力します。ありがとう、私が推測する初心者の間違い...まあまあ私は思っています。ありがとうございました –

+0

@PatrickBoucheあなたの質問を満足する場合は、答えを受け入れる必要があります – Jonathan

関連する問題