我需要经历一年中的几个月,看看这个月的最后一天是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天)。
谢谢!
答案 0 :(得分:2)
这样做(简单的方法)
var last_day=new Date(year,month,-1).getDate()
这将给出月中的最后一天
答案 1 :(得分:0)
就if
语句而言,是的,您总是需要添加mois ==
部分,否则您将检查字符串“Fevrier”的布尔值,而不是将其与mois
变量进行比较值。
就您尝试实现的一般结果而言,标准库中可能有许多更简单的方法可供您使用。如果这是JavaScript,请参阅例如this article
答案 2 :(得分:0)
以下是我的意思:
parseInt()
将其转换为数字。month % 2 == 1
,则为奇数月份:
year % 400 == 0 || year % 100 == 0 || year % 4 == 0
:适当处理闰年。答案 3 :(得分: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"
)
答案 4 :(得分:0)
这似乎没有棘手的日期数学:
var SomeDate = new Date(2012, 10); // November, 2012
SomeDate.setDate(SomeDate.getDate() - 1); // go back one day
var DaysInMonth = SomeDate.getDate();
答案 5 :(得分:-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 ");
}