1

我需要查看一年中的几个月,看看该月的最后一天是 28、29、30 还是 31。我的问题是第一个 if 语句总是评估为真:

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 月有 29 天而不是 28 天)。

谢谢!

4

6 回答 6

2

这样做(简单的方法)

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

这将给出一个月的最后一天

于 2012-11-10T16:57:57.427 回答
0

if语句而言,是的,您总是需要添加mois ==部分,否则您将检查字符串“Fevrier”的布尔值,而不是将其与mois变量值进行比较。

就您试图达到的一般结果而言,标准库中可能有很多更简单的方法可供您使用。如果这是 JavaScript,请参见例如这篇文章

于 2012-11-10T16:42:03.283 回答
0

以下是我将如何去做:

  1. 获取月份并将其转换为数字。您可能需要使用哈希来执行此操作。
  2. 获取年份并将其转换为数字,parseInt()就像您所做的那样使用。
  3. 如果month % 2 == 1,则为奇数月:
    • 如果year % 400 == 0 || year % 100 == 0 || year % 4 == 0:适当处理闰年。
    • 否则:返回 30。
  4. 否则:偶数月,返回 31。
于 2012-11-10T16:50:23.953 回答
0

这是针对您的if()条件的缩短建议:RegExp 对象(尽管这不会回答您的问题)。

/^(Janvier|Mars|Mai|Juillet|Août|(Octo|Décem)bre|0?[13578]|1[02])$/.test(mois))
// append i after the last forward slash if you want it not to respect case

是一样的

if (
mois == "Janvier" || mois == "Mars" || mois == "Mai" || mois == "Juillet" ||
mois == "Août" || mois == "Octobre" || mois == "Décembre" || mois == "1" ||
mois == "3" || mois == "5" || mois == "7" || mois == "8" || mois == "10" ||
mois == "12" || mois == "01" || mois == "03" || mois == "05" || mois == "07" ||
mois == "08"
)

if (/^(Février|Avril|Juin|(Sept|Nov)embre|0?[2469]|11)$/.test(mois))
// same thing about the case-insensitive (i) flag here...

是一样的

if (
mois == "Février" || mois == "Avril" || mois == "Juin" || mois == "Septembre" ||
mois == "Novembre" || mois == "2" || mois == "4" || mois == "6" || mois == "9" ||
mois == "11" || mois == "02" || mois == "04" || mois == "06" || mois == "09"
)
于 2012-11-10T17:24:36.753 回答
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 回答
-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 回答