1

1年の月を調べて、その月の最後の日が28、29、30、または31であるかどうかを確認する必要があります。私の問題は、最初のifステートメントが常にtrueと評価されることです。

MOIS_I = 31
if (mois == "Janvier" || "Mars" || "Mai" || "Juillet" || "Août" || "Octobre" || "Décembre" || "1" || "3" || "5" || "7" || "8" || "10" || "12" || "01" || "03" || "05" || "07" || "08") {
            window.alert("Le mois " + mois + " de l'année " + annee + " compte " + MOIS_I + " jours ");
}

また、やらなくてはいけないようif (mois == "Janver" || mois == "Février" || ... )ですが、もっといい方法があるのか​​知りたかったです。

完全なコードは次のとおりです。

    var mois, annee, test4, test100, test400;
    const MOIS_P = 30;
    const MOIS_I = 31;
    const FEV_NORM = 28; 
    const FEV_BISSEX = 29;
    const TEST_4 = 4;
    const TEST_100 = 100;
    const TEST_400 = 400;

    mois = window.prompt("Entrez un mois de l'année", "");
    annee = window.prompt("Entrez l'année de ce mois", "");
    /* MOIS IMPAIRS */
    if (mois == "Janvier" || "Mars" || "Mai" || "Juillet" || "Août" || "Octobre" || "Décembre" || "1" || "3" || "5" || "7" || "8" || "10" || "12" || "01" || "03" || "05" || "07" || "08") {
            window.alert("Le mois " + mois + " de l'année " + annee + " compte " + MOIS_I + " jours ");
    /* MOIS PAIRS */
    } else if (mois == "Février" || "Avril" || "Juin" || "Septembre" || "Novembre" || "2" || "4" || "6" || "9" || "11" || "02" || "04" || "06" || "09") { 
        if (mois == "Février") {
            test4 = parseInt(annee) % TEST_4;
            test100 = parseInt(annee) % TEST_100;
            test400 = parseInt(annee) % TEST_400;
            if (test4 == 0) {
                if (test100 != 0) {
                    window.alert("Le mois " + mois + " de l'année " + annee + " compte " + FEV_BISSEX + " jours ");
                } else {
                    window.alert("Le mois " + mois + " de l'année " + annee + " compte " + FEV_NORM + " jours ");
                }
            } else if (test400 == 0) {
                    window.alert("Le mois " + mois + " de l'année " + annee + " compte " + FEV_BISSEX + " jours ");
            } else {
                window.alert("Le mois " + mois + " de l'année " + annee + " compte " + FEV_NORM + " jours ");
            }
        } else {
            window.alert("Le mois " + mois + " de l'année " + annee + " compte " + MOIS_P + " jours ");
        }           
    } else {
        window.alert("Apocalypse!");
    }

TEST_4、TEST_100、TEST_400は、その年がうるう年であるかどうかをテストします(つまり、2月は28日ではなく29日です)。

ありがとうございました!

4

6 に答える 6

2

このようにする(簡単な方法)

var last_day=new Date(year,month,-1).getDate()

これは月末になります

于 2012-11-10T16:57:57.427 に答える
0

これは、トリッキーな日付計算なしで機能するようです:

var SomeDate = new Date(2012, 10);  // November, 2012

SomeDate.setDate(SomeDate.getDate() - 1);  // go back one day

var DaysInMonth = SomeDate.getDate();
于 2012-11-10T17:47:02.440 に答える
0

ifステートメントに関しては、はい、常に部分を追加する必要があります。そうしないと、変数値mois ==と比較する代わりに、文字列「Fevrier」のブール値をチェックしています。mois

あなたが達成しようとしている一般的な結果に関しては、おそらく標準ライブラリで利用できるもっと簡単な方法がたくさんあります。これが JavaScript の場合は、たとえばこの記事を参照してください。

于 2012-11-10T16:42:03.283 に答える
0

これが私がそれについて行く方法です:

  1. 月を取得して数値に変換します。これを行うには、おそらくハッシュを使用する必要があります。
  2. 年を取得し、これを使用して数値に変換しparseInt()ます。
  3. の場合month % 2 == 1、奇数月:
    • If year % 400 == 0 || year % 100 == 0 || year % 4 == 0: うるう年を適切に処理します。
    • それ以外の場合: 30 を返します。
  4. それ以外の場合: 偶数月の場合は 31 を返します。
于 2012-11-10T16:50:23.953 に答える
-1

これは、一連の文字列全体に対してチェックするより良い方法です。許可されているすべての名前をオブジェクト (マップと呼ばれることが多い) に配置すると、1 行のコードでその名前がマップに含まれているかどうかを確認できます。

var names = {
    "Janvier": true, "Mars": true, "Mai": true, "Juillet": true, 
    "Août": true, "Octobre": true, "Décembre": true, 
    "1": true, "3": true, "5": true, "7": true, "8": true, "10": true, "12": true, 
    "01": true, "03": true, "05": true, "07": true, "08": true
};

if (names[mois] === true) {
     window.alert("Le mois " + mois + " de l'année " + annee + " compte " + MOIS_I + " jours ");
}
于 2012-11-10T17:15:50.840 に答える